Является ли тегирование POS детерминированным?

Я пытался понять, почему это происходит, но надеюсь, что кто-то может пролить свет на это. Я пытаюсь пометить следующий текст:

ae0.475      X  mod 
ae0.842      X  mod
ae0.842      X  mod 
ae0.775      X  mod 

используя следующий код:

import nltk

file = open("test", "r")

for line in file:
        words = line.strip().split(' ')
        words = [word.strip() for word in words if word != '']
        tags = nltk.pos_tag(words)
        pos = [tags[x][1] for x in range(len(tags))]
        key = ' '.join(pos)
        print words, " : ", key

и получаю следующий результат:

['ae0.475', 'X', 'mod']  :  NN NNP NN
['ae0.842', 'X', 'mod']  :  -NONE- NNP NN
['ae0.842', 'X', 'mod']  :  -NONE- NNP NN
['ae0.775', 'X', 'mod']  :  NN NNP NN

И я не понимаю. Кто-нибудь знает, в чем причина такого несоответствия? Я не очень требователен к точности тегов сообщений, потому что я пытаюсь извлечь некоторые шаблоны, но, похоже, в разных случаях используются разные теги для слова, которое выглядит «почти» одинаково.

В качестве решения я заменил все цифры на 1 и решил проблему:

['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN
['ae1.111', 'X', 'mod']  :  NN NNP NN

но мне любопытно, почему он пометил экземпляр разными тегами в моем первом случае. Какие-либо предложения?


person Legend    schedule 30.06.2011    source источник


Ответы (2)


Я изо всех сил старался понять обнаруженный это от кого-то, кто не использовал весь Коричневый корпус:

Обратите внимание, что слова, которые тегировщик ранее не видел, например decried, получают тег None.

Итак, я предполагаю, что что-то похожее на ae1.111 должно появиться в файле корпуса, но ничего похожего на ae0.842. Это немного странно, но это причина для присвоения тега -NONE-.

Редактировать: мне стало очень любопытно, сам загрузил корпус Brown и поискал внутри текстовый текст Это. Число 111 встречается в нем 34 раза, а число 842 всего 4 раза. 842 появляется либо в середине суммы в долларах, либо как последние 3 цифры года, а 111 появляется много раз как номер страницы. 775 также появляется один раз как номер страницы.

Итак, я собираюсь сделать предположение, что благодаря закону Бенфорда вы в конечном итоге совпадения чисел, начинающихся с 1, 2 и 3, гораздо чаще, чем чисел, начинающихся с 8 или 9, поскольку чаще всего это номера случайных страниц, которые будут цитироваться в книге. Мне было бы очень интересно узнать, правда ли это (но, конечно, не настолько, чтобы сделать это самому!).

person Chris Cunningham    schedule 30.06.2011
comment
+1 за закон Бенфорда. И кстати вы правы. Это действительно номера страниц. В моем эксперименте любому числу › 790 присваивается тег None, а для остальных — тег NN. :) Отличный улов! - person Legend; 01.07.2011

Это «детерминировано» в том смысле, что одно и то же предложение будет каждый раз помечаться одним и тем же образом с использованием одного и того же алгоритма, но поскольку ваши слова не входят в данные nltk (фактически, они даже не являются настоящими словами в реальных предложениях). ) он будет использовать некоторый алгоритм, чтобы попытаться сделать вывод о том, какими будут теги. Это будет означать, что у вас могут быть разные теги при изменении слов (даже если изменение будет другим числом, как у вас), и что теги в любом случае не будут иметь особого смысла.

Что заставляет меня задаться вопросом, почему вы пытаетесь использовать НЛП для неестественных языковых конструкций.

person trutheality    schedule 30.06.2011
comment
Мне нравится этот ответ. Очень сомнительно, почему здесь используется NLTK. Однако, если это действительно требуется, то возможный хак мог бы состоять в том, чтобы определить пользовательский корпус со всеми возможными словами и пользовательский фрагмент. Но кажется, что это слишком много работы для чего-то, что должно (и может быть), вероятно, сделано намного проще. - person inspectorG4dget; 01.07.2011
comment
+1 за хорошее объяснение. Я пробую несколько исследовательских методов, чтобы найти лучший способ преобразования моих данных в какой-то промежуточный формат, который поможет в извлечении шаблонов. Кажется, это работает очень хорошо для моего случая (возможно, не для каждого случая). - person Legend; 01.07.2011
comment
Строго говоря, pos_tag NLTK вообще не обязан быть детерминированным. Некоторые алгоритмы машинного обучения подбрасывают монеты внутри. - person Fred Foo; 03.07.2011