2013-04-03 3 views
2

Я пробовал искать его здесь и там, но не смог найти ни одного хорошего решения, поэтому, спрашивая экспертов nlp. Я разрабатываю приложение поиска сходства текста, для которого мне нужно сопоставлять тысячи и тысячи документов (около 1000 слов каждый) друг с другом. Для части nlp лучшим вариантом является NLTK (видя его возможности и дружелюбие алгоритма python). Но теперь, когда части речевых тегов сами занимают столько времени, я считаю, что nltk может быть не лучшим образом. Java или C не будут Пожалуйста, обратите внимание, что я уже начал мигрировать с mysql на hbase, чтобы работать с большей свободой на таком большом количестве данных. Но все же существует вопрос, как выполнять algos. быть выбором, но это тоже для машинного обучения, а не для nlp (может быть полезно для распознавания речи) .Какие еще доступны варианты. В gist мне нужна высокая производительность nlp (шаг от высокопроизводительного машинного обучения) (Я немного склонен к Маху, видя будущее использование).Как повысить производительность NLTK? альтернативы?

Речь идет о масштабировании nltk.

+2

NLTK очень медленный; это в основном полезно для прототипирования. Рассмотрим [Gensim] (http://radimrehurek.com/gensim/), это гораздо более масштабируемо. –

ответ

1

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

Вот краткое руководство (link), которое научит вас некоторым концепциям, но их лучше всего объяснить в главе 8 в книге Маху в действии.

В принципе, вы должны сначала представить свои данные в Hadoop формат SequenceFile, для которого вы можете использовать команду seqdirectory, но это может оказаться слишком медленным, учитывая, что он будет хотеть каждый документ как отдельный файл (так что если у вас есть «Идут тысячи и тысячи документов».) This post связан в том смысле, что в нем говорится о том, как сделать SequenceFile из файла CSV, где каждая строка является документом. Хотя, если я не ошибаюсь, у Маута может быть определенная функциональность. Возможно, вы захотите спросить в списке рассылки пользователей Mahout.

После того, как ваши документы представлены в формате Hadoop SequenceFile, вам необходимо применить команду seq2sparse. Полный список доступных параметров командной строки приведен в главе 8 книги, но вы можете запрограммировать команду для ее подсказки и она даст вам список команд. Одна из команд, которая вам понадобится, - это -a, которая является именем класса текстового анализатора (lucene?), Который вы хотите использовать, здесь вы можете избавиться от стоп-слов, словосочетания, удалить пунктуацию и т. Д. Анализатор по умолчанию есть org.apache.lucene.analysis.standard.StandardAnalyzer.

Затем вы представляете свои данные в виде матрицы с помощью команды rowid.

После этого вы используете команду rowsimilarity, чтобы получить большинство похожих документов.

Надеюсь, это поможет.

+0

благодарит @Julian. Определенно я собираюсь попробовать. Мне было интересно, можем ли мы использовать nlp-мощь выделенных nlp-библиотек, таких как Opennlp/nltk и т. Д. С возможностью масштабирования mahout? Например, если в будущем мне нужно проанализировать все позиционные теги в предложениях, тогда я могу использовать nltk, но если набор данных велик, mahout - очевидный выбор. Вот путаница. – akshayb

+0

Я не знаю об этих библиотеках. Но на стороне примечания, если вам нужна скорость, вы можете посмотреть на что-то вроде [minhashing] (http://en.wikipedia.org/wiki/MinHash) –

+0

спасибо, глядя на него. Одна важная вещь, которая может решить проблему различных людей вокруг - я разработал алгоритм кластеризации в nltk. Я использовал различные теги pos и другие красивые вещи. Теперь идет масштабируемость. Как достичь масштабируемости с помощью nltk? Это Маху?или что-то другое? Это реальный вопрос. – akshayb