1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/baidu-lac

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Введение в инструмент

LAC — сокращение от Lexical Analysis of Chinese — это совместный лексический анализатор, разработанный отделом естественного языка компании Baidu. Он обеспечивает функции китайской сегментации, тегирования слов и распознавания специфических названий. Этот инструмент имеет следующие особенности и преимущества:- Высокое качество: использует глубинные модели машинного обучения для совместной работы над задачами сегментации, тегирования слов и распознавания специфических названий. Коэффициент F1 для сегментации составляет более 0,91, для тегирования слов — более 0,94, а для распознавания специфических названий — более 0,85. Это делает его одним из лучших решений в своей области.

  • Высокая производительность: благодаря оптимизации параметров моделей и использованию библиотеки Paddle Prediction производительность CPU при однопоточном выполнении достигает 800 QPS, что является лучшим показателем в отрасли.
  • Пользовательская настройка: реализован механизм простого и контролируемого вмешательства, который позволяет точно соответствовать словарю пользователя для внесения корректив в модель. Поддерживается длинный формат словаря, что повышает точность вмешательства.
  • Простота использования: поддерживает быстрый запуск через одну команду, предоставляет интерфейсы вызова для Python, Java и C++, а также примеры использования этих языков.
  • Поддержка мобильных устройств: разработана сверхлегкая модель размером всего 2 МБ, которая обеспечивает производительность до 200 QPS на одном потоке на современных смартфонах за тысячу юаней, удовлетворяющая потребности большинства мобильных приложений.## Установка и использование В этом разделе мы рассмотрим установку и использование на Python, а также упомянем другие языки программирования:
  • C++
  • Java
  • Android

Инструкция по установке

Код совместим с 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)
  • Выходные данные:```text 【Одиночный образец】: seg_result = ['LAC', '-', 'отличный', 'инструмент', 'для', 'сегментации'] 【Батч образцов】: seg_result = [['LAC', '-', 'отличный', 'инструмент', 'для', 'сегментации'], ['Baidu', '-', 'высокотехнологичная', 'компания']]
- Пример кода:
```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)
  • Выход:```text 【одиночный образец】: 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]), (['Baidu', 'является', 'высокотехнологичной', 'компанией'], ['ORG', 'v', 'm', 'n', 'n'], [3, 0, 2, 3, 1]) ]

Словарь важности слов представлен в следующей таблице, мы используем 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":

1. Обучение по токенизации

  • Пример данных

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

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')
2. Лингвистическая обработка текста
  • Пример данных

    На основе данных для токенизации каждое слово помечено в виде "/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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/baidu-lac.git
git@api.gitlife.ru:oschina-mirror/baidu-lac.git
oschina-mirror
baidu-lac
baidu-lac
master