LAC — сокращение от Lexical Analysis of Chinese — это совместный лексический анализатор, разработанный отделом естественного языка компании Baidu. Он обеспечивает функции китайской сегментации, тегирования слов и распознавания специфических названий. Этот инструмент имеет следующие особенности и преимущества:- Высокое качество: использует глубинные модели машинного обучения для совместной работы над задачами сегментации, тегирования слов и распознавания специфических названий. Коэффициент F1 для сегментации составляет более 0,91, для тегирования слов — более 0,94, а для распознавания специфических названий — более 0,85. Это делает его одним из лучших решений в своей области.
Код совместим с Python 2 и 3
Автоматическая установка: pip install lac
Полуавтоматическая установка: сначала скачайте http://pypi.python.org/pypi/lac/, затем распакуйте и выполните python setup.py install
После завершения установки вы можете запустить сервис в командной строке, введя lac
или lac --segonly
, lac --rank
для быстрого тестирования.
Для пользователей из Китая рекомендуется использовать зеркало Baidu для установки, чтобы увеличить скорость установки:
pip install lac -i https://mirror.baidu.com/pypi/simple
from LAC import LAC
# Загрузка модели сегментации
lac = LAC(mode='seg')
# Одиночный образец входных данных, входные данные представлены Unicode-кодированной строкой
text = u'ЛАЦ — отличный инструмент для сегментации'
seg_result = lac.run(text)
# Батч образцов входных данных, входные данные представлены списком предложений, средняя скорость будет выше
texts = [u'ЛАЦ — отличный инструмент для сегментации', u'Байду — высокотехнологичная компания']
seg_result = lac.run(texts)
- Пример кода:
```python
from LAC import LAC
```# Загрузка модели LAC
lac = LAC(mode='lac')
# Ввод одного образца, входные данные в виде Unicode-кодированной строки
text = u"LAC является отличным инструментом для лемматизации"
lac_result = lac.run(text)
# Ввод нескольких образцов, входные данные в виде списка предложений, средняя скорость выше
texts = [u"LAC является отличным инструментом для лемматизации", u"Baidu - это высокотехнологичная компания"]
lac_result = lac.run(texts)
Для каждого предложения выводятся его токены
word_list
и теги для каждого словаtags_list
, формат которого выглядит как(word_list, tags_list)
[один образец]: lac_result = ([LAC, является, отличным, инструментом, для, лемматизации], [nz, v, a, n, p, n])
[несколько образцов]: lac_result = [
([LAC, является, отличным, инструментом, для, лемматизации], [nz, v, a, n, p, n]),
([Baidu, является, высокотехнологичной, компанией], [ORG, v, a, n])
]
Таблица ниже показывает набор меток для частей речи и специальных категорий, среди которых четыре наиболее часто используемых категории специальных названий представлены заглавными буквами:
Метка | Описание | Метка | Описание | Метка | Описание | Метка | Описание |
---|---|---|---|---|---|---|---|
n | Обычное существительное | f | Направление | s | Место | nw | Наименование работы |
nz | Другие специальные названия | v | Обычное глагол | vd | Глагол + частица | vn | Существительное + глагол |
a | Прилагательное | ad | Частица + прилагательное | an | Существительное + прилагательное | d | Частица |
m | Числительное | q | Часто используется вместе с числительным | r | Замещающее слово | p | Предлог |
c | Союз | u | Усиливающий знак | xc | Другие виртуальные знаки | w | Знак препинания |
PER | Лицо | LOC | Место | ORG | Организация | TIME | Время |
from LAC import LAC
# Загрузка модели важности слов
lac = LAC(mode='rank')
# Ввод одного образца, входные данные в виде Unicode-кодированной строки
text = u"LAC является отличным инструментом для лемматизации"
rank_result = lac.run(text)
# Ввод нескольких образцов, входные данные в виде списка предложений, средняя скорость выше
texts = [u"LAC является отличным инструментом для лемматизации", u"Baidu — это высокотехнологичная компания"]
rank_result = lac.run(texts)
Словарь важности слов представлен в следующей таблице, мы используем 4-уровневую градацию для классификации:
| Тег | Описание | Частота встречаемости |
| --- | -------------------------------- | ---------------------- |
| 0 | Избыточные слова в запросе | p, w, xc ... |
| 1 | Слабо ограничивающие слова в запросе | r, c, u ... |
| 2 | Сильно ограничивающие слова в запросе | n, s, v ... |
| 3 | Ключевые слова в запросе | nz, nw, LOC ... |### Пользовательская настройка
На основе вывода модели, LAC также поддерживает конфигурирование пользователем специализированного разбиения на токены и типов собственных названий. Когда модель прогнозирует совпадение с элементами словаря, она заменяет исходный результат на пользовательски настроенный. Для достижения более точной совместимости мы поддерживаем использование длинных фрагментов, состоящих из нескольких слов, как одного элемента.
Мы реализуем эту функцию путём загрузки файла словаря, где каждая строка представляет собой один настраиваемый элемент, составленный из одного или нескольких последовательных слов, каждый из которых следует за меткой '/'. Если метки '/' отсутствуют, используется стандартная метка модели. Чем больше слов содержится в элементе, тем более точно он будет влиять на результат.
- Пример файла словаря
> Здесь приведён пример, демонстрирующий различные случаи использования. В будущем будут доступны методы конфигурации словарей с использованием шаблонов, ожидайте анонса.
```text
весна/СЕЗОН
цвет/n расцвести/v
осеннего ветра
заход солнца
from LAC import LAC
lac = LAC()
# Загрузка пользовательского словаря, параметр sep указывает разделитель в файле словаря, если None, используются пробел или табуляция '\t'
lac.load_customization('custom.txt', sep=None)
```# Результат после применения пользовательского словаря
custom_result = lac.run(u"весна цветёт осень ветер зимний закат солнца")
---
- Пример входных данных "весна цветёт осень ветер зимний закат солнца", исходный результат был бы следующим:
```text
весна/ВРЕМЯ цветёт/v осень/ВРЕМЯ ветер/n зимний/v закат/s солнца/n
весна/СЕЗОН цвет/n расцвести/v осеннего ветра/n зимний/v закат/s солнца/n
Мы также предоставляем интерфейсы для увеличенного обучения, что позволяет пользователям использовать свои данные для дополнительного обучения модели. Сначала все данные должны быть преобразованы в формат, подходящий для входных данных модели, и все файлы данных должны быть закодированы в "UTF-8":
Пример данных
Формат данных аналогичен большинству открытых наборов данных для токенизации, использует пробелы для разделения слов, как показано ниже:
LAC это хороший инструмент для токенизации.
Baidu это высокотехнологическая компания.
Весна цветёт осень ветер зимний закат солнца.
from LAC import LAC
# Выбор использования модели для токенизации
lac = LAC(mode='seg')
# Обучающая и тестовая выборка, имеют одинаковый формат
train_file = "./data/seg_train.tsv"
test_file = "./data/seg_test.tsv"
lac.train(model_save_dir='./my_seg_model/', train_data=train_file, test_data=test_file)
```# Использование обученной модели
my_lac = LAC(model_path='my_seg_model')
Пример данных
На основе данных для токенизации каждое слово помечено в виде "/type", указывающего на его часть речи или тип сущности. Важно отметить, что лингвистическая обработка текста поддерживает только те данные, у которых система меток совпадает с нашей. В будущем будет поддерживаться новый набор меток, следите за обновлениями.
LAC/nz является/v словом/q хорошим/a слова/v .w
Baidu/ORG является/v компанией/m высокотехнологичной/n компании/n .w
Весна/TIME имеет/u цветение/v осень/TIME имеет/u ветер/n а также/c зима/TIME имеет/u закат/n .w
from LAC import LAC
# Выбор использования стандартной модели для лингвистической обработки текста
lac = LAC()
# Обучающая и тестовая выборка, имеют одинаковый формат
train_file = "./data/lac_train.tsv"
test_file = "./data/lac_test.tsv"
lac.train(model_save_dir='./my_lac_model/', train_data=train_file, test_data=test_file)
# Использование обученной модели
my_lac = LAC(model_path='my_lac_model')
.
├── python # Скрипты для вызова из Python
├── c++ # Код для вызова из C++
├── java # Код для вызова из Java
├── Android # Примеры вызова из Android
├── README.md # Данный файл
└── CMakeList.txt # Скрипт компиляции для C++ и Java
```## Цитирование LAC в научных работах
Если ваша научная работа использует LAC, пожалуйста, добавьте следующее цитирование. Мы очень рады, что LAC помогает вам в ваших исследованиях.
```text
@article{jiao2018LAC,
title={Лингвистическая обработка текста с использованием глубоких двунаправленных сетей GRU-CRF},
author={Джiao, Чженю и Сунь, Шуци и Сунь, Кэ},
journal={arXiv preprint arXiv:1807.01882},
year={2018},
url={https://arxiv.org/abs/1807.01882}
}
Мы приветствуем участников проекта, желающих внести свой вклад в развитие LAC. Если вы создали новую функциональность или нашли ошибку... мы приглашаем вас отправить Pull request и issue на Github.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )