Классификация NLTK и WordNet с текстовым BLOB-объектом

У меня есть следующие два комплекта. Идея состоит в том, чтобы иметь возможность классифицировать новостные статьи на основе нескольких предоставленных мне метатегов. Например, когда я получаю статью, в которой есть «Судья» «5 лет», ее следует классифицировать как криминальную историю.

train = [
             ('Honda', 'cars'),
             ('Ford', 'cars'),
             ('Volkswagen', 'cars'),
             ('Courthouse', 'crime'),
             ('Police', 'crime'),
             ('Taurus', 'cars'),
             ('Chevrolet', 'cars'),
             ('Sonic', 'cars'),
             ('Judge', 'crime'),
             ('Jail', 'crime')
             ]
    test = [
            ('Porsche', 'cars'),
            ('Toyota', 'cars'),
            ('Arrest', 'crime'),
            ('Prison', 'crime')
            ]

    cl = NaiveBayesClassifier(train)

Проблема в том, что когда я запускаю это:

for a, b in test:
        print a, cl.classify(a)

Он классифицирует все как "автомобили"

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

я побежал

word = Word("Volkswagen")
for each in word.definitions:
    print each

но это не дает мне никаких результатов.

Теперь вопрос:

Как мне заставить WordNet сказать, что Volkswagen — это автомобиль, интегрировать это в классификатор, чтобы он понял, что Hyndai также является автомобилем, и правильно его классифицировал?


person Killerpixler    schedule 06.02.2014    source источник


Ответы (2)


WordNet® — это большая лексическая база данных английского языка, названия марок автомобилей не входят в WordNet, поэтому вы не можете знать, что Volkswagen — это автомобиль из WordNet. Чтобы классифицировать слово по категориям, вы должны построить вектор признаков для каждого примера поезда и теста.

person D Volsky    schedule 07.09.2014

У вашей проблемы есть несколько аспектов, и вам, вероятно, следует рассмотреть их один за другим:

«Я уверен, что мне здесь не хватает семантического сравнения сходства».

«Семантическое сходство» — это лишь одно из многих возможных улучшений, которые вы можете рассмотреть. Обратите внимание, что даже для «семантического подобия» есть много разных способов включить его в свою модель, и не все из них могут быть достаточно простыми, чтобы быть небольшой модификацией вашего текущего решения на основе NaiveBayes. Но самое главное, вы делаете здесь ошибку «преждевременной оптимизации». Прежде чем приступить к построению сложных моделей с помощью WordNet-совпадений и тому подобного, убедитесь, что ваше текущее решение действительно недостаточно.

Вы обнаружили, что если вы обучаете классификатор NaiveBayes на наборе данных, в котором отсутствует слово «арест», результирующая модель будет иметь сложности с классификацией этого слова в будущем. Тем не менее, есть вероятность, что с достаточно реалистичным тренировочным набором вы не окажетесь в ситуации, когда в тестовой статье слишком часто не будет абсолютно никаких знакомых тегов.

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

но это не дает мне никаких результатов.

Как упоминалось в другом ответе, WordNet просто не имеет информации о слове «Фольксваген». Даже если бы это было так, вы не должны ожидать, что все слова в вашем вводе будут «знакомыми», «без опечаток», «правильными» и т.п. В контексте того, что вы делаете, вы должны просто надеяться, что в новостной статье достаточно «знакомых» тегов, чтобы распознать ее общую тему.

Как мне заставить WordNet сказать, что Volkswagen - это автомобиль, интегрировать это в классификатор, чтобы он понял, что Hyndai также является автомобилем, и правильно его классифицировал

Возможный ответ на этот конкретный вопрос: сделать свой граф ассоциаций слов, добавить ассоциацию «Hyunday»-«Volkswagen», а также некоторые другие вещи, и использовать что-то вроде модели «k-ближайших соседей» для вашего классификатора. .

Однако, сделав это, вы отошли от своей первоначально заявленной задачи «классификации новостных статей по их тегам», и ваш классификатор по-прежнему не будет работать со словом «Hynday»;)

person KT.    schedule 12.09.2014