LAC, полное название лексического анализа китайского языка, представляет собой совместный инструмент лексического анализа, разработанный отделом обработки естественного языка Baidu для реализации таких функций, как сегментация китайских слов, разметка частей речи и распознавание имен собственных. Этот инструмент имеет следующие особенности и преимущества:
Здесь мы в основном знакомим с установкой и использованием Python, а также с использованием других языков:
Код, совместимый с Python2/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"LAC是个优秀的分词工具"
seg_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
seg_result = lac . run ( texts )
【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]
from LAC import LAC
# 装载LAC模型
lac = LAC ( mode = 'lac' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
lac_result = lac . run ( texts )
Выходные данные каждого предложения — это результат сегментации слов word_list и tags_list каждого слова в формате (word_list, tags_list).
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])
]
Набор тегов категорий частей речи и имен собственных следующий, в котором мы отмечаем четыре наиболее часто используемые категории имен собственных прописными буквами:
Этикетка | значение | Этикетка | значение | Этикетка | значение | Этикетка | значение |
---|---|---|---|---|---|---|---|
н | нарицательное существительное | ж | местоположение существительное | с | место существительное | теперь | Название работы |
Новая Зеландия | Другие имена собственные | в | общий глагол | ВД | глагол наречие | вн | существительное глагол |
а | прилагательное | объявление | наречие | а | существительное | д | наречие |
м | Квантор | д | квантификатор | р | местоимение | п | предлог |
с | соединение | ты | частица | хс | Другие служебные слова | ш | Пунктуация |
ПЕР | имя | ЛОК | Название места | ОРГ | Название организации | ВРЕМЯ | время |
from LAC import LAC
# 装载词语重要性模型
lac = LAC ( mode = 'rank' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
rank_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
rank_result = lac . run ( texts )
【单样本】:rank_result = [['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n],[3, 0, 0, 2, 0, 3, 1]]
【批量样本】:rank_result = [
(['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n], [3, 0, 0, 2, 0, 3, 1]),
(['百度', '是', '一家', '高科技', '公司'],
[ORG, v, m, n, n], [3, 0, 2, 3, 1])
]
Набор меток для каждой категории важности слов следующий. Для классификации мы используем 4-уровневый градиент:
Этикетка | значение | распространённая часть речи |
---|---|---|
0 | Лишние слова, выраженные в запросе | п, ш, хс... |
1 | Слабо квалифицированные слова в запросе | р, с, ты... |
2 | Строго уточненные слова в запросе | н, с, в... |
3 | основные слова в запросе | нз, нв, ЛОК... |
На основе результатов модели LAC также помогает пользователям настраивать результаты сегментации и выходные данные типа имени собственного. Когда модель прогнозирует элемент, соответствующий словарю, она заменит исходный результат настраиваемым результатом. Чтобы добиться более точного сопоставления, мы поддерживаем в качестве элемента длинные фрагменты, состоящие из нескольких слов.
Мы реализуем эту функцию путем загрузки файла словаря. Каждая строка файла словаря представляет собой настраиваемый элемент, состоящий из одного слова или нескольких последовательных слов. Если знак «/» отсутствует, после каждого слова. label Будет использоваться метка модели по умолчанию. Чем больше слов в каждом пункте, тем точнее будет эффект вмешательства.
Пример файла словаря
Это всего лишь пример, показывающий результаты при различных требованиях. Режим настройки словаря с помощью подстановочных знаков будет открыт в будущем, так что следите за обновлениями.
春天/SEASON
花/n 开/v
秋天的风
落 阳
from LAC import LAC
lac = LAC ()
# 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符't'
lac . load_customization ( 'custom.txt' , sep = None )
# 干预后结果
custom_result = lac . run ( u"春天的花开秋天的风以及冬天的落阳" )
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n
春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n
Мы также предоставляем интерфейс инкрементного обучения. Пользователи могут использовать свои собственные данные для инкрементного обучения. Сначала данные необходимо преобразовать в формат входных данных модели, а все файлы данных имеют кодировку «UTF-8»:
Образец данных
В соответствии с форматом большинства наборов данных сегментации слов с открытым исходным кодом в качестве маркеров сегментации слов используются пробелы, как показано ниже:
LAC 是 个 优秀 的 分词 工具 。
百度 是 一家 高科技 公司 。
春天 的 花开 秋天 的 风 以及 冬天 的 落阳 。
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 的/u 分词/n 工具/n 。/w
百度/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 может помочь вам в вашей академической работе.
@article{jiao2018LAC,
title={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},
author={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},
journal={arXiv preprint arXiv:1807.01882},
year={2018},
url={https://arxiv.org/abs/1807.01882}
}
Мы приглашаем разработчиков внести свой код в LAC. Если вы разрабатываете новые функции и находите ошибки... вы можете отправлять запросы на включение и проблемы в Github.