spacy textcategorizer на удивление хорошо работает при переключении на другой язык, чем тексты - PullRequest
0 голосов
/ 20 октября 2019

У меня есть общий вопрос о способе textcategorizer в просторных работах. Судя по разным частям информации о пространственной документации и моих тестах, кажется, что она не использует предварительно обученные модели и их функции, по крайней мере, в языках с небольшими моделями, такими как немецкий, или, конечно, так называемые языки с поддержкой apha, такие как польский без моделей. Я использую spacy 2.1.8, и моя задача категоризации - классифицировать текст на немецком языке на 18 эксклюзивных категорий. Это работает хорошо, и я получил удивительно хорошую перекрестную проверку точности, однако, пытаясь понять механику, я обнаружил некоторые удивительные вещи, когда тестировал, я не загружаю модель, используя spacy.blank. Ядро моего кода выглядит следующим образом:

nlp = spacy.blank("de")     

    textcat = nlp.create_pipe(
                "textcat",
                config={
                    "exclusive_classes": True,
                    "architecture": "simple_cnn",
                }
            )
    nlp.add_pipe(textcat, last=True)
    for c in categories:
        textcat.add_label(c)  

    other_pipes = [pipe for pipe in nlp.pipe_names if pipe != "textcat"]
    with nlp.disable_pipes(*other_pipes):  
        optimizer = nlp.begin_training()
        print("what vectors:",nlp.vocab.vectors.name)
        #here I get always the output spacy_pretrained_vectors,f.e. if I call "pl" instead "de" 

Затем я использую nlp.update в мини-пакетах и ​​оптимизируюсь со средними значениями

nlp.update(texts, annotations, sgd=optimizer, drop=0.2, losses=losses)

with textcat.model.use_params(optimizer.averages):
    # evaluate on the dev data split off in load_data()
    scores = eval_save_multi_scores(nlp.tokenizer, textcat, x_dev_skf, y_dev_skf)     

Первые странные вещи заключались в том, что переход на совершенно другой язык, такой как польский, и выполнение той же классификации по немецким текстам неизменить результаты, окончательная точность остается неизменной после 5-кратного резюме. Я также пробовал финский и испанский языки, тоже самое. Таким образом, это доказывает для меня, что он не использует свойства предварительно обученных моделей, даже если есть доступные контекстно-зависимые тензоры, которые совместно используются в конвейере, как для немецкого языка (Из вопроса https://github.com/explosion/spaCy/issues/2523) Согласно описанию из spacy.ioдля архитектуры, которую я использую: «Модель нейронной сети, в которой векторы токенов вычисляются с использованием CNN. Векторы объединяются в средние значения и используются в качестве функций в сети с прямой связью». Поэтому я понимаю, что в ней используется токенизатор (специфическийтолько для языка, а затем вычислите! (поэтому не используйте те из предварительно обученных моделей) контекстно-зависимые векторы токенов для текстов, и этого достаточно для NN, чтобы корректировать веса, чтобы иметь правильную категоризацию, даже если токен не так верен при выборе другогоlang чем text. У кого-нибудь есть другие объяснения или что-то еще, что можно добавить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...