2015-10-20 11 views
1

Это, вероятно, довольно простой вопрос NLP, но у меня есть следующая задача: у меня есть набор текстовых документов, которые мне нужно забить на (английском) лексиконе терминов, которые могут быть 1-, 2-, 3- и т.п N -word long. N ограничен некоторым «разумным» числом, но распределение различных терминов в словаре для различных значений n = 1, ..., N может быть довольно однородным. Этот лексикон может, например, содержать список устройств определенного типа, и я хочу узнать, может ли данный документ быть вероятным в отношении любого из этих устройств. Поэтому я хотел бы забить документ high (er), если он имеет одно или несколько вхождений любой из записей лексики.Прикладная НЛП: как занести документ в лексику многословных терминов?

Что такое стандартный метод НЛП для оценки, учитывая различные формы слов, которые могут появляться в лексиконе? Какая предварительная обработка потребуется как для входных документов, так и для лексики для выполнения оценки? Какие инструменты с открытым исходным кодом существуют как для предварительной обработки, так и для оценки?

+0

Возможно, вы захотите выполнить поиск по термину «lemmatizing» - объединение нескольких форм слова под одним заголовком (лемма или корень). Если вы сканируете тег [машинное обучение] (http://stackoverflow.com/questions/tagged/machine-learning), вы найдете множество ссылок на инструменты: MLlib, SciKit Learn, SCLearn и т. Д. один в открытом исходном коде - платформа Trusted Analytics (я нахожусь в команде разработчиков программного обеспечения). – Prune

ответ

2

Я изучил LSI и тему моделирования почти год назад, поэтому то, что я говорю, должно восприниматься как просто указатель, чтобы дать вам общее представление о том, где искать.

Существует множество способов сделать это с разной степенью успеха. Это сложная проблема в области information retrieval. Вы можете найти topic modeling, чтобы узнать о различных вариантах и ​​состоянии техники.

Вам определенно необходима предварительная обработка и нормализация, если слова могут отображаться в разных формах. Как насчет NLTK и один из его парадигматических:

>>> from nltk.stem.lancaster import LancasterStemmer 
>>> st = LancasterStemmer() 
>>> st.stem('applied') 
'apply' 
>>> st.stem('applies') 
'apply' 

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

Это называется векторной пространственной ИК-моделью. Условия и документы преобразуются в векторы в k-мерном пространстве. Для этого мы должны построить матрицу с пометкой. Это представляет собой матрицу образца, в которой числа представляют частоты терминов в документах:

enter image description here

До сих пор мы имеем матрицу 3х4 с помощью которой каждый документ может быть выражен с помощью 3-мерного массива (каждая колонка) , Но по мере увеличения количества терминов эти массивы становятся слишком большими и все более скудными. Кроме того, есть много слов, таких как I или and, которые встречаются в большинстве документов без добавления большого семантического контента. Поэтому вы можете игнорировать эти типы слов. Для проблемы крупности и разреженности вы можете использовать математическую технику под названием SVD, которая масштабирует матрицу, сохраняя большую часть содержащейся в ней информации.

Кроме того, цифры, которые мы использовали на приведенной выше диаграмме, были необработанными. Другим методом будет использование булевых значений: 1 для наличия и 0 нуля из-за отсутствия в документе термина. Но они предполагают, что слова имеют равные семантические веса. На самом деле более редкие слова имеют больше вес, чем обычные. Таким образом, хорошим способом редактирования исходной матрицы было бы использовать функции ранжирования, такие как tf-id, для назначения относительных весов каждому члену.Если к настоящему времени мы применили SVD к нашей взвешенной матрице по-документам, мы можем построить k-мерные векторы запросов, которые являются просто массивом термов. Если бы наш запрос содержал несколько экземпляров одного и того же термина, использовался бы продукт частоты и веса термина.

Что нам нужно сделать оттуда несколько прямолинейно. Мы сравниваем векторы запросов с векторами документов, анализируя их cosine similarities, и это будет основой для ранжирования документов по отношению к запросам.

 Смежные вопросы

  • Нет связанных вопросов^_^