Как извлечь семантическую родственность из текстового корпуса

Цель состоит в том, чтобы оценить семантическую взаимосвязь между терминами в большом текстовом корпусе, например, "полиция" и "преступление" должны иметь более сильную семантическую взаимосвязь, чем "полиция" и "гора", так как они имеют тенденцию сосуществовать в одном и том же контексте.

Простейший подход, о котором я читал, состоит в извлечении информации IF-IDF из корпуса.

Многие люди используют скрытый семантический анализ, чтобы найти семантические корреляции.

Я наткнулся на поисковую систему Lucene: http://lucene.apache.org/

Как вы думаете, это подходит для извлечения IF-IDF?

Что бы вы порекомендовали сделать, что я пытаюсь сделать, как с точки зрения техники, так и с точки зрения программного обеспечения (с предпочтением Java)?

Заранее спасибо!

Mulone

2 ответа

Это очень легко, если у вас есть индекс Lucene. Например, чтобы получить корреляцию, вы можете использовать простую формулу count(term1 и term2)/ count(term1)* count(term2). Где количество хитов из результатов поиска. Более того, вы можете легко вычислить другие показатели семнтики, такие как chi^2, информационный прирост. Все, что вам нужно, это получить формулу и преобразовать ее в условия count от Query

Да, Lucene получает данные TF-IDF. Алгоритм Carrot^2 является примером программы семантического извлечения, построенной на Lucene. Я упоминаю об этом, поскольку в качестве первого шага они создают корреляционную матрицу. Конечно, вы, вероятно, можете легко построить эту матрицу самостоятельно.

Если вы имеете дело с кучей данных, вы можете использовать Mahout для сложных частей линейной алгебры.

Другие вопросы по тегам