Търсене в естествен език
Sponsored Links
This presentation is the property of its rightful owner.
1 / 49

Търсене в естествен език PowerPoint PPT Presentation


  • 109 Views
  • Uploaded on
  • Presentation posted in: General

Търсене в естествен език. Васил Момчев. Онтотекст. academy . devbg . org. www.devbg.org. Цел на лекцията. Разбиране на проблемите свързани с търсенето в текстови данни Запознаването с основни алгоритми за търсене в текст и тяхното оптимизиране

Download Presentation

Търсене в естествен език

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Търсене в естествен език

Васил Момчев

Онтотекст

academy.devbg.org

www.devbg.org


Цел на лекцията

  • Разбиране на проблемите свързани с търсенето в текстови данни

  • Запознаването с основни алгоритми за търсене в текст и тяхното оптимизиране

  • Примерни реализации на търсене в текст в основните бази данни и тяхното съпоставяне

  • Реализация на търсене на текст извън база данни


Основен алгоритъм за търсенето в текст

  • Въведение

  • Основен алгоритъм за търсенето на текстови даннии построяване на inverted index

  • Методи за оптимизирането скоростта на inverted index

  • Търсене на текст в базите данни – MySQL, Microsoft SQL Server и Oracle

  • Използване на други алгоритми за търсене в текст


Въведение

Основни видове търсене


Въведение

Основни изисквания към търсенето на текстова информация

Търсене на думи, а не substring

Пример: “London police release photos of terror suspects”

“lease” не трябва да бъде откриван при търсенето в текст, за разлика от при substring търсене


Въведение

Основни изисквания към търсенето на текстова информация

Езиково и символно търсене

Пример езиково търсене: Думата “mouse”, трябва да бъде откривана във всичките си езикови форми “mouse”, “mice”...

Пример символно търсене: “C++”


Въведение

Основни изисквания към търсенето на текстова информация

Оценяване на резултатите

Търсенето на думи, за разлика от търсенето на string не е точно дефинирано


Въведение

Методи на оценяване на системите за търсене в текст

  • Резултатност (effectiveness)

    • точност на оценяване (precision) брой точни / брой върнати документи

    • точност на връщане (recall) брой точни / общ брой точни документи

  • Производителност (efficiency)


Основен алгоритъм за търсенето на текстови данни


Основен алгоритъм за търсенето на текстови данни

Без значение от подхода е необходима структура от данни, която ефективно да извършва

  • Търсене на документ по термин (често)

  • Изтриване на документ (рядко)

  • Промяната съдържанието на документ (рядко)

  • Добавяне на нови документи (рядко)


Основен алгоритъм за търсенето на текстови данни

Пример за inverted index:

“Зелена гора”, “Червена къща”, “Зелена ябълка”, “Червена ябълка”

гора (1);

зелена (3);(1);

къща (2);

червена (4);(2);

ябълка (4);(3);

в скоби документите в които се среща ключовата дума


Основен алгоритъм за търсенето на текстови данни

Видове inverted index, според типовете заявки:

  • Inverted file index – съдържа списък на всички термини и документите, в които се съдържат

  • Full inverted index – съдържа списък на всички термини, документите и позициите, в които се съдържат

  • Inverted index с честота на срещане на термините в документите– съдържа списък на всички термини и честотата им на срещане в документите


Основен алгоритъм за търсенето на текстови данни

Приложение на различните inverted index:

  • Термин -> Документ (за булеви заявки)

    t1 (d1), (d2), …

  • Термин -> Документ; Честота на термин в документа (по-добра резултатност)

    t1 (d1, tf1), (d2, tf2), …

  • Термин -> Документ; Позиция (търсене на фрази и търсене по близост)

    t1(d1, p1), (d2, p2), …


Основен алгоритъм за търсенето на текстови данни

For each document d in the collection

Begin

numSubSet = 1

While memory exists:

For each term t in document d

Find term t in the term dictionary

If term t exists, add a node to its posting list

Otherwise, add term t to the term dictionary

Write SubSet of Inverted index to disk

numSubSet = numSubSet + 1

Free memory

End

For I = 1 to numSubSet

Merge SubSet I with Inverted Index


Основен алгоритъм за търсенето на текстови данни

Различни реализации на inverted index, като структура от данни

  • Сортиран списък

    +бърз за създаване+бърз за търсене-много бавен за промяна на информацията


Основен алгоритъм за търсенето на текстови данни

Различни реализации на inverted index, като структура от данни

  • B-дърво

    + бърз за търсене-създаването и промяната не може да бъде разпределена- сложна имплементация


Основен алгоритъм за търсенето на текстови данни

Различни реализации на inverted index, като структура от данни

  • Поредица от малки сегментни индекси

    +бързи за създаване+бързи за промяна на информацията-по-бавни за търсене


Основен алгоритъм за търсенето на текстови данни

Различни реализации на inverted index, като структура от данни

  • Hashtable

    + бърз за създаване, промяна и търсене- несортиран речник (трудности при търсене на wildcard и обединение на индекси)


Основен алгоритъм за търсенето на текстови данни

Предимства на inverted index

  • Ефективно търсене на термин или поредица от термини срещу документ

  • Определя тежестта на термините според тяхната честота на срещане

  • Определя тежестта на документите според дължината на текст


Основен алгоритъм за търсенето на текстови данни

Недостатъци на inverted index

  • Необходимост на значителни ресурси за генерирането

  • Големина на индексите, която може да надвишава и размера на самата индексирана информация


Основен алгоритъм за търсенето на текстови данни

Общ процес на индексиране

  • Datastore

  • Filter

  • Sectioner

  • Lexer

  • Indexing engine


Основен алгоритъм за търсенето на текстови данни


Методи за оптимизиране скоростта на inverted index


Методи за оптимизиране скоростта на inverted index

Няколко начина за оптимизиране скоростта на търсене:

  • Използване на различни preprocess стъпки за елиминиране на често срещани думи

  • Компресиране на данните

    • Компресиране на информацията за термините

    • Компресиране на информацията за срещането на термините

  • Елиминирани на части от заявката


Методи за оптимизиране скоростта на inverted index

Използване на различни preprocess стъпки за елиминиране на често срещани думи – стоп думи

Стоп думите могат да намалят размерът на inverted index около на 50%.

Думата “the” се среща около 7% в текст на английски!


Методи за оптимизиране скоростта на inverted index

Компресиране на информацията за термините

consider; considerable; considerably; considerate; considerateness; consideration; considering;conservancy; conservation; conservationist; conservatism; conservative

consider[4]able[4]ably[3]are[7]ateness[5]ation[3]ing

converva[3]ncy[4]tion[7]tionist[4]tism[4]tive


Методи за оптимизиране скоростта на inverted index

Компресиране на информацията за срещането на термините

Документът Di е представен като Di – Di-1

... 5600; 5679; 5684; 5685; 5780 …

... 79; 5; 1; 5; …

  • Числата се записват с по малко битове

  • Намалява големината на списъците с 10-15%


Методи за оптимизиране скоростта на inverted index

Компресиране на данните води до:

Предимства

  • Намаляване големината на индексите

  • Драстично намаляване броя на дисковите операции

    Недостатъци

  • Увеличава се значително времето за създаване на индекс


Методи за оптимизиране скоростта на inverted index

Елиминирани на части от заявката

Термин1, Термин2, ... Термин N

Сортират се по-честота на срещане на термина (значимост)

Термин 1 – 100% от документите

Термин 2 – 80 % от документите

Термин 3 – 60% от документите

Възможност за определяне на стоп думи без статичното им задаване


Търсене на текст в базите данни

Търсене на текст в базите данни – MySQL, Microsoft SQL Server и Oracle


Търсене на текст в базите данниMySQL 4.1

MySQL 4.1

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])

където:

  • col1, col2 ... colN са колони от тип char, varchar или text на таблица от тип MyISAM

  • еxpr израз съдържащ: +задължителнаДума -неприсъстващаДума <думаСпонисъкРанк >думаСповисокРанк (група думи) ~отирцаниепрефикс* “фраза“


Търсене на текст в базите данниMySQL 4.1

Boolean search mode

  • Резултатите не са сортирани по score

  • Score може да приема стойности от 1 до броя на откритите думите (възможно е score да бъде изчисляван с различен израз от изразът за търсене)

  • Няма ограничение за честотата на срещане на думите


Търсене на текст в базите данни MySQL 4.1

MySQL не може да извършва:

  • Езиково търсене “test” != “tests” и символно търсене “C++”

  • Търсене на думи равни или по-малки от 3 символа по подразбиране

  • Да открива думи, които се срещат в повече от половината записи

  • Паралелно търсене в fulltext и обикновен индекс

  • Конфигурацията на собствени компоненти за разбор на думи (Lexer) и филтри (Filter)


Търсене на текст в базите данниMySQL 4.1

CREATE TABLE t_text (id INTEGER PRIMARY KEY, title TEXT, text TEXT);

ALTER TABLE t_text ADD (FULLTEXT(title,text));

REPAIR TABLE t_text QUICK;


Търсене на текст в базите данни MySQL 4.1

SELECT id, MATCH (col1[,col2…]) AGAINST (‘exp1') AS score

FROM articles WHERE MATCH (col1[,col2…]) AGAINST (‘exp1')


Търсене на текст в базите данниMicrosoft SQL Server 2000

Microsoft SQL Server 2000Fulltext Service

  • CONTAINS(column,’expr’)

  • CONTAINSTABLE(table, column, ‘expr’[, пърите N по ранк)

  • FREETEXT(column,’expr’)

  • FREETEXTTABLE(table, column, ‘expr’[, първите N по ранк)

    Където column може да приема стойност на колона или * (всички колони за таблицата)


Търсене на текст в базите данни Microsoft SQL Server 2000

Синтаксис на expr за търсене с CONTAINS или CONTAINSTABLE

  • Дума или фраза

  • Префикс на дума или фраза

  • Дума в близост до друга

  • Езиково търсене на различни форми на думата

  • Булеви заявки


Търсене на текст в базите данни Microsoft SQL Server 2000

Microsoft SQL Server 2000 не може да извършва:

  • Паралелно търсене по fulltext и обикновен индекс

  • Символно търсене “C++”

  • Лесно пренасяне на fulltext индекси между сървъри и техния backup

  • Конфигурацията на собствени компоненти за разбор на думи (Lexer) и филтри (Filter)


Търсене на текст в базите данни Microsoft SQL Server 2000

Управление на fulltext индексите посредством запазените процедури

  • sp_fulltext_catalog (управление на каталозите)

  • sp_fulltext_database (инициализира база за работа с fulltext каталози)

  • sp_fulltext_service (конфигурира процесът на индексиране)

  • sp_fulltext_table (добавя или прехва индекси върху таблица)


Търсене на текст в базите данни Microsoft SQL Server 2000

SELECT key, rank

FROM

CONTAINSTABLE(t_tree,text,’expr’, 100)

SELECT id

FROM t_tree

WHERE

CONTAINS(text, ‘expr’)


Търсене на текст в базите данни Oracle

Oracle Database 10.1.0.2

SCORE(id)

CONTAINS(column, ‘expr’[, id]) > 0

CATSEARCH(column, ‘expr’, ‘structured query’) > 0

MATCHES(column, text);

където ‘expr’ е израз подържащ булеви изрази AND, OR, NOT, wildcard % и _, NEAR, ABOUT

‘structured query’ – най-често колона за сортиране

‘text’ – текст използван за класификация


Търсене на текст в базите данни Oracle

Oracle Text подържа конфигурация на:

  • Datastore за извличане на данни директно, от няколко колони (запазена процедура), файл или URL

  • Filter (реализиран като запазена процедура)

  • Lexer (възможно е и собствена имплементация)


Търсене на текст в базите данни Oracle

CREATE TABLE t_text (id NUMBER PRIMARY KEY, title VARCHAR2(4000), text CLOB)

CREATE INDEX i_title ON t_text(title) INDEXTYPE IS CTXSYS.CONTEXT

SELECT id, score(1) FROM t_textWHERECONTAINS(text,‘expr',1) > 0


Използване на други алгоритми за търсене в текст


Използване на други алгоритми за търсене в текст

Jarkarta Lucene

  • API за търсене на текст

  • Реализации с отворен код на Java и .NET

  • Позволява голяма гъвкавост в процеса на индексиране и търсене

  • Търсене на булеви изрази, близост на думи, фрази, диапазон стойности (числови и дати)

  • Конфигурация и имплементация на Lexer и Filter (Analyzer)

  • Лесен за вграждане в други приложения


Използване на други алгоритми за търсене в текст

IndexWriter – клас използван при запазване индекс на диск

Analyzer – клас обединяващ функциите на Lexer и Filter

Document – клас представляващ документ за индексиране; съдържа name/value колекция от стригове представяща съдържанието

Query – клас използван за търсене

QueryParser – помощен клас за разбор на заявката и създване на обект от тип Query


Използване на други алгоритми за търсене в текст

Индексиране на документ:

IndexWriter index = new IndexWriter(myFile, myAnalyzer, true); // задава се Analyzer

Document doc = new Document();

doc.add(Field.Text(“field1”,”value1”));

doc.add(Field.Text(“dbid”,”id”, false));

index.addDocument(doc); // индексиране на документа


Използване на други алгоритми за търсене в текст

Откриване на документ:

Searcher searcher = new IndexSearcher(myFile);

Query myQuery = QueryParser.parse(“expr”, “field”, myAnalyzer);

Hits hits = searcher.search(myQuery);

hits.doc(0).get(“dbid”);


Търсене в естествен език

Въпроси?


  • Login