Рубрики
Без рубрики

Положить все вместе – последовательность маркировки в Python (часть 5)

Давайте подготовим наш алгоритм трубопроводы для новых предложений полет. Помечено Python, Datascity, NLP.

Это пятый (и последний) пост в моей серии Последовательность маркировки в Python Найдите предыдущий здесь: CRF для мешки последовательности . Получить код для этой серии на Гадость .

Что хороша наша система, если мы не можем использовать его, чтобы предсказать этикетки новых предложений. До этого, однако, мы должны позаботиться о том, чтобы настроить полный трубопровод, чтобы пойти от нового предложения, как показано на сайте VueUSax, чтобы иметь полностью помеченное предложение на наших сценариях Python.

Идея состоит в том, чтобы заимствовать функции из всех других предыдущих постов; Эти функции были реплицированы где-то внутри vuelax Пакеты и импортируются, чтобы сделать их менее грязными для работы.

У нас новое предложение!

Представьте себе получение нового предложения, которое выглядит так:

¡Sin Pasar Ee.uu! 🇪🇬 ¡¡¡¡¡¡¡¡¡¡¡¡¡¡🇪🇬 a mécial a el cairo, egipto $ 13 677!

Если ваш испанский не в точке, я переводю это для вас:

Без остановок в США! 🇪🇬 Любой аэропорт в Мехико в Каир, Египет 13 677 долларов!

offer_text = "¡Sin pasar EE.UU! 🇪🇬¡Todo México a El Cairo, Egipto $13,677!"

Шаги:

Tokenise : Первый шаг должен был токеризировать его, используя ваш Индекс emoji tokenize функция

from vuelax.tokenisation import index_emoji_tokenize

tokens, positions = index_emoji_tokenize(offer_text)

print(tokens)

Погибги : Следующее в строке состоит в том, чтобы получить теги POS, соответствующие каждому из токенов. Мы можем сделать это, используя Стэнфордпостуггггггггггггггггггггггггерс :

from nltk.tag.stanford import StanfordPOSTagger

spanish_postagger = StanfordPOSTagger('stanford-models/spanish.tagger', 
                                      'stanford-models/stanford-postagger.jar')

_, pos_tags = zip(*spanish_postagger.tag(tokens))

print(pos_tags)

Подготовьтесь к CRF : Этот шаг включает в себя добавление дополнительных функций и подготовки данных, которые должны потребляться пакетом CRF. Все необходимые методы существуют в vueuex.feature_selection.

from vuelax.feature_selection import featurise_token

features = featurize_sentence(tokens, positions, pos_tags)

print(features[0])

Последовательность маркировки с pycrfsuite : И последний шаг – загрузить нашу обученную модель и тег нашей последовательностью:

import pycrfsuite

crf_tagger = pycrfsuite.Tagger()
crf_tagger.open('model/vuelax-bad.crfsuite')

assigned_tags = crf_tagger.tag(features)

for assigned_tag, token in zip(assigned_tags, tokens):
    print(f"{assigned_tag} - {token}")

И результат:

n - ¡
n - Sin
n - pasar
n - EE.UU
n - !
n - ¡
o - Todo
o - México
s - a
d - El
d - Cairo
d - ,
d - Egipto
n - $
p - 13,677
n - !

По визуальной проверке мы можем подтвердить, что теги верны: «Todo México» – это происхождение (O), «El Cairo, EgiPto» – это пункт назначения, а «13 677» – это цена (P).

И это так. Это конец этой серии постов о том, как делать последовательность маркировки с Python. Я надеюсь, что вы смогли следовать, а если нет, я надеюсь, у вас есть несколько вопросов для меня. Помните, опубликуйте их здесь или спросите меня через Twitter @io_Exception Отказ

Что еще есть делать?

Есть много способов, которыми этот проект может быть улучшен, несколько приходят на ум:

  • Улучшить размер/качество набора данных путем маркировки больше примеров
  • Улучшить то, как происходит маркировка, используя одну электронную таблицу вообще не масштабируется
  • Интегрируйте все под одним переработким трубопроводом
  • «Производитель» код, выйти за рамки эксперимента.

Оригинал: “https://dev.to/fferegrino/putting-everything-together-sequence-labelling-in-python-part-5-19ng”