PKUSeg: инструмент для многообластного китайского токенизатора
PKUSeg — это набор инструментов, основанный на статье Luo et. al 2019 года. Он отличается простотой использования и поддерживает детальное разделение по областям, что значительно повышает точность токенизации.
Содержание:
Основные особенности:
Компиляция и установка: — В настоящее время поддерживается только Python 3. — Для достижения наилучших результатов и скорости рекомендуется обновлять до последней версии через pip install.
Установка через PyPI (с предустановленными моделями):
pip3 install pkuseg
После этого можно импортировать pkuseg.
Рекомендуется обновить до последней версии для лучшего опыта:
pip3 install -U pkuseg
Если скорость загрузки с официального источника PyPI не устраивает, можно использовать зеркальный источник, например: Для первой установки:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pkuseg
Обновление:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -U pkuseg
Если вы не хотите устанавливать через pip, вы можете скачать пакет с GitHub и запустить следующую команду для установки:
python setup.py build_ext -i
Код на GitHub не включает предварительно обученные модели. Вам необходимо загрузить или обучить их самостоятельно. Предварительно обученные модели доступны в разделе release. При использовании необходимо установить «model_name» в файл модели.
Обратите внимание: методы установки 1 и 2 поддерживают только Linux (Ubuntu), Mac и Windows 64-битные версии Python 3. Для других систем рекомендуется выполнить локальную компиляцию и установку.
Сравнение производительности различных инструментов токенизации: Мы сравнили PKUSeg с популярными китайскими инструментами токенизации, такими как Jieba и THULAC, на основе статьи Luo et. al. Подробные настройки можно найти в разделе «Экспериментальная среда».
Результаты сравнения для конкретных областей:
MSRA | Точность | Воспоминание | F-оценка |
---|---|---|---|
Jieba | 87,01 | 89,88 | 88,42 |
THULAC | 95,60 | 95,91 | 95,71 |
PKUSeg | 96,94 | 96,81 | 96,88 |
Точность | Воспоминание | F-оценка | |
---|---|---|---|
Jieba | 87,79 | 87,54 | 87,66 |
THULAC | 93,40 | 92,40 | 92,87 |
PKUSeg | 93,78 | 94,65 | 94,21 |
Сравнение эффективности по умолчанию для разных областей: Учитывая, что большинство пользователей пробуют инструменты токенизации без предварительного знания о них, мы также сравнили эффективность моделей по умолчанию в разных областях. Однако такое сравнение не всегда справедливо.
По умолчанию | MSRA | CTB8 | PKU | Среднее значение для всех | |
---|---|---|---|---|---|
Jieba | 81,45 | 79,58 | 81,83 | 83,56 | 81,61 |
THULAC | 85,55 | 87,84 | 92,29 | 86,65 | 88,08 |
PKUSeg | 87,29 | 91,77 | 92,68 | 93,43 | 91,29 |
Здесь «Среднее значение для всех» показывает среднее значение F-оценки для всех тестовых наборов.
Дополнительные сравнения можно найти в разделе «Сравнение с существующими инструментами».
Использование:
Примеры кода: Следующие примеры кода подходят для интерактивной среды Python.
Пример кода 1: использование конфигурации по умолчанию для токенизации (рекомендуется использовать модель по умолчанию, если область токенизируемого текста неизвестна):
import pkuseg
seg = pkuseg.pkuseg() # Загрузить модель с конфигурацией по умолчанию
text = seg.cut('我爱北京天安门') # Токенизация
print(text)
Пример кода 2: детальная токенизация по областям (рекомендуется использовать модели для конкретных областей, если они известны):
import pkuseg
seg = pkuseg.pkuseg(model_name='medicine') # Загрузить модель для медицинской области
text = seg.cut('我爱北京天安门') # Токенизация
print(text)
Пример кода 3: токенизация с маркировкой частей речи, подробные метки можно найти в tags.txt:
import pkuseg
seg = pkuseg.pkuseg(postag=True) # Включить маркировку частей речи
text = seg.cut('我爱北京天安门') # Токенизация и маркировка частей речи
print(text)
Другие примеры использования можно найти в разделе «Подробные примеры кода».
Параметры: Модельная конфигурация:
pkuseg.pkuseg(model_name = "default", user_dict = "default", postag = False)
model_name: путь к модели.
"default": модель по умолчанию (только для пользователей, загружающих через pip).
"news": модель для новостей.
"web": модель для интернета.
"medicine": модель для медицины.
"tourism": модель для туризма.
model_path: загрузка модели из указанного пути.
user_dict: настройка пользовательского словаря.
"default": словарь по умолчанию.
None: без использования словаря.
dict_path: дополнительный пользовательский словарь (если выбран анализ частей речи и известна часть речи слова, она должна быть указана после слова через tab).
postag: выполнять ли анализ частей речи.
False: только токенизация.
True: токенизация с анализом частей речи. **Разбиение текста на слова**
pkuseg.test(readFile, outputFile, model_name = "default", user_dict = "default", postag = False, nthread = 10) readFile Входной файл. outputFile Выходной файл. model_name Путь к модели. То же самое, что и pkuseg.pkuseg user_dict Установка пользовательского словаря. То же, что и pkuseg.pkuseg postag Указывает, следует ли включать анализ частей речи. То же, что и pkuseg.pkuseg nthread Число процессов при тестировании.
**Обучение модели**
pkuseg.train(trainFile, testFile, savedir, train_iter = 20, init_model = None) trainFile Файл для обучения. testFile Файл для тестирования. savedir Расположение сохранённой модели. train_iter Количество итераций обучения. init_model Инициализация модели. По умолчанию — None, используется модель по умолчанию. Пользователь может указать путь к собственной модели, например, init_model='./models/'.
#### Многопоточное разбиение на слова
Когда код помещается в файл и выполняется, включая многопоточные функции, обязательно используйте `if __name__ == '__main__'` для защиты глобальных операторов. Подробнее см. в разделе «Многопоточное разбиение на слова» (readme/multiprocess.md).
## Предварительное обучение модели
Для пользователей, которые устанавливают пакет через pip, достаточно установить поле model_name в соответствии с областью применения. Модель будет автоматически загружена.
Пользователи, скачавшие модель с GitHub, должны загрузить соответствующую предварительно обученную модель и установить для поля model_name путь к предварительно обученной модели. Предварительно обученные модели можно скачать в разделе [release](https://github.com/lancopku/pkuseg-python/releases). Ниже приводится описание предварительно обученных моделей:
- **news**: модель, обученная на данных MSRA (новости).
- **web**: модель, обученная на данных из Weibo (интернет-тексты).
- **medicine**: модель, обученная на медицинских данных.
- **tourism**: модель, обученная на туристических данных.
- **mixed**: общая модель, которая поставляется вместе с пакетом pip.
Мы также создали несколько предварительно обученных моделей для конкретных областей с помощью метода адаптации к области и оптимизировали общую модель с использованием данных Википедии без разметки. Эти модели доступны только для скачивания в разделе release:
- **art**: модель, обученная на художественных и культурных данных.
- **entertainment**: модель, обученная на развлекательных и спортивных данных.
- **science**: модель, обученная на научных данных.
- **default_v2**: оптимизированная общая модель после адаптации к области. Она больше по размеру, чем стандартная модель, но имеет лучшую обобщающую способность.
Приглашаем других пользователей поделиться своими собственными моделями для конкретных областей.
## История версий
Подробнее см. в разделе «История версий» (readme/history.md).
## Лицензия с открытым исходным кодом
1. Этот код использует лицензию MIT.
2. Мы приветствуем любые ценные предложения и комментарии от пользователей. Пожалуйста, отправьте электронное письмо на адрес jingjingxu@pku.edu.cn.
## Цитирование научной статьи
Этот пакет кода основан на следующих научных статьях. Если вы используете этот инструмент, пожалуйста, укажите следующие статьи:
* Ruixuan Luo, Jingjing Xu, Yi Zhang, Zhiyuan Zhang, Xuancheng Ren, Xu Sun. [PKUSEG: A Toolkit for Multi-Domain Chinese Word Segmentation](https://arxiv.org/abs/1906.11455). Arxiv. 2019.
@article{pkuseg, author = {Luo, Ruixuan and Xu, Jingjing and Zhang, Yi and Zhang, Zhiyuan and Ren, Xuancheng and Sun, Xu}, journal = {CoRR}, title = {PKUSEG: A Toolkit for Multi-Domain Chinese Word Segmentation.}, url = {https://arxiv.org/abs/1906.11455}, volume = {abs/1906.11455}, year = 2019 }
## Другие связанные научные статьи
* Xu Sun, Houfeng Wang, Wenjie Li. Fast Online Training with Frequency-Adaptive Learning Rates for Chinese Word Segmentation and New Word Detection. ACL. 2012.
* Jingjing Xu and Xu Sun. Dependency-based gated recursive neural network for chinese word segmentation. ACL. 2016.
* Jingjing Xu and Xu Sun. Transfer learning for low-resource chinese word segmentation with a novel neural network. NLPCC. 2017.
## Часто задаваемые вопросы и ответы
1. [Почему был выпущен pkuseg?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#1-为什么要发布pkuseg)
2. [Какие технологии используются в pkuseg?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#2-pkuseg使用了哪些技术)
3. [Не удаётся использовать многопоточное разделение на слова и функцию обучения, появляется сообщение об ошибке RuntimeError и BrokenPipeError.](https://github.com/lancopku/pkuseg-python/wiki/FAQ#3-无法使用多进程分词和训练功能提示runtimeerror和brokenpipeerror)
4. [Как сравнить с другими инструментами на данных для конкретных областей?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#4-是如何跟其它工具包在细领域数据上进行比较的)
5. [Каковы результаты сравнения на чёрном ящике тестового набора?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#5-在黑盒测试集上进行比较的话效果如何)
6. [Что делать, если я не знаю, к какой области относится текст, который нужно разделить на слова?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#6-如果我不了解待分词语料的所属领域呢)
7. [Как интерпретировать результаты разделения на слова для некоторых конкретных примеров?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#7-如何看待在一些特定样例上的分词结果)
8. [Вопрос о скорости выполнения?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#8-关于运行速度问题)
9. [Вопрос о многопоточной скорости?](https://github.com/lancopku/pkuseg-python/wiki/FAQ#9-关于多进程速度问题)
## Благодарности
Спасибо профессору Юй Шивэню (Пекинский университет, Институт вычислительной лингвистики) и доктору философии Цю Ликуну за предоставленные обучающие данные!
## Автор
Ruixuan Luo (罗睿轩), Jingjing Xu(许晶晶), Xuancheng Ren(任宣丞), Yi Zhang(张艺), Zhiyuan Zhang(张之远), Bingzhen Wei(位冰镇), Xu Sun (孙栩)
Пекинский университет [Группа исследования языка, вычислений и машинного обучения](http://lanco.pku.edu.cn/)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )