Стенфордские курсы — замечательная штука, и я, например, очень рад интересу, который явно услился в рунете в результате…
Я тоже наслушался этих курсов, начитался Джурафски. Писал почти такой же классификатор, правда делал не сентимент анализ, а классификатор определяющий жанры текста. Для тестирования брал корпуса, вот смех — то, из «библиотека в кармане» — наивный байесовский классификатор отработал на «ура» с англоязычными текстами.
В общем, в результате класс умеет определять является ли текст документалистикой, фантастикой, приключенияи или Драммой (удивительно, но фантастику и приключения отличает пристойно)
Да, и еще, критикам скажу, что сигнатуры методов тут и не могут быть особо другими, потому не удивительно что это похоже на то, что предложенно в курсе по nlp. У меня например такие методы
метод для обучения (у автора «add_example»)
def learn(self, genre, words):
if genre not in self.genres:
self.genres[genre] = 0
self.genres[genre] += len(words)
for word in words:
if not word in self.vocabulary:
self.vocabulary[word] = {}
if not genre in self.vocabulary[word]:
self.vocabulary[word][genre] = 1
else:
self.vocabulary[word][genre] += 1
И сам классификатор
def classify(self, words):
result = {}
for g in self.genres:
result[g] = 0
for word in words:
if word in self.vocabulary:
for genre in self.genres:
if genre in self.vocabulary[word]:
k = (self.vocabulary[word][genre] + 1.0) / (self.genres[genre] + len(self.vocabulary))
result[genre] += math.log(k)
else:
result[genre] += math.log(1.0 / (self.genres[genre] + len(self.vocabulary)))
else:
for genre in self.genres:
result[genre] += math.log(1.0 / (self.genres[genre] + len(self.vocabulary)))
sigma = 0
for g in self.genres:
sigma += self.genres[g]
for g in self.genres:
result[g] += math.log(self.genres[g]/float(sigma))
return result
Я тоже наслушался этих курсов, начитался Джурафски. Писал почти такой же классификатор, правда делал не сентимент анализ, а классификатор определяющий жанры текста. Для тестирования брал корпуса, вот смех — то, из «библиотека в кармане» — наивный байесовский классификатор отработал на «ура» с англоязычными текстами.
В общем, в результате класс умеет определять является ли текст документалистикой, фантастикой, приключенияи или Драммой (удивительно, но фантастику и приключения отличает пристойно)
Да, и еще, критикам скажу, что сигнатуры методов тут и не могут быть особо другими, потому не удивительно что это похоже на то, что предложенно в курсе по nlp. У меня например такие методы
метод для обучения (у автора «add_example»)
И сам классификатор
В любом случае, спасибо за статью!