30
17 октября 2015

Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

Embed Size (px)

Citation preview

Page 1: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 2: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Павел Вейник

Программирование и лингвистика:как понять язык и

извлечь знания из текстов

Реальный кейс проекта

Page 3: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Понимание текста

Эмоциональный анализ

Определение тематики текста

Определение тенденций

Выявление значимых событий и персон

Knowledge Extraction

Page 4: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Natural Language Processing

Качество всегда существенно меньше 100%

В критичных задачах требуют вмешательства человека

Часто сложны в понимании и применении

Не решают прямо business задачи

Page 5: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Проект

Заказчик: большой инвестиционный фонд (не стартапы — строительство, финансы...)

Цель: всегда иметь полный и минимальный обзор текущих событий в интересующих областях.

Контекст: мировые новости на английском языке.

MVP: простейшее выделение объектов.

Page 6: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline

Page 7: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Search Engine

Задача: получить адреса всех страниц по интересующим тематикам.

Решение: использовать платный Google Custom Search.

Вход: Seed Phrases — список создается до начала работы и постоянно пополняется в процессе.

Реализация: custom, Amazon EC2.

Page 8: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Crawler

Задача: получить содержимое всех страниц по интересующим тематикам.

Вход: очередь адресов.

Решение: использовать Crawler4j — просто и немасштабируемо.

Реализация: Crawler4j, Amazon EC2.

Page 9: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Text Extractor

Задача: извлечь текст статьи из страницы.

Сложность: эвристики, машинное обучение.

Вход: очередь страниц.

Решение: использовать boilerpipe.code.google.com/p/boilerpipe/

Реализация: boilerpipe, несколько Amazon EC2.

Page 10: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 11: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: NE Extractor

Задача: извлечь Named Entities из текста страницы.

Сложность: эвристики, машинное обучение, словари.

Вход: очередь страниц.

Решение: использовать Illinois Named Entity Tagger.cogcomp.cs.illinois.edu/page/software_view/NETagger

Реализация: Illinois NE Tagger, несколько Amazon EC2.

Page 12: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 13: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: NE Disambiguator

Задача: понять какие NE представляют одно и то же.

Сложность: эвристики, машинное обучение, словари.

Вход: очередь NE и текст страницы.

Решение: использовать Illinois NE Similarity Metric.cogcomp.cs.illinois.edu/page/software_view/NESim

Реализация: Illinois NESim + custom, несколько Amazon EC2.

Page 14: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 15: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Relation Extractor

Задача: найти в тексте связки.Связка — то, что может связывать NE в предложении.

Сложность: эвристики, словари.

Вход: очередь страниц.

Решение: сформировать и пополнять словарь связок.

Реализация: custom, несколько Amazon EC2.

Page 16: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 17: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Temporal Expressions Extractor

Задача: найти в тексте упоминания дат в любом виде.

Сложность: эвристики, словари.

Вход: очередь страниц.

Решение: Illinois Temporal Expression Extractor.

Реализация: Illinois TE Extractor, несколько Amazon EC2.

Page 18: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 19: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Sentence Detector

Задача: разбить текст на предложения.

Сложность: эвристики, машинное обучение.

Вход: очередь страниц.

Решение: Stanford Tokenizer, LingPipe Sentence Detection или ANNIE Sentence Splitter.

Реализация: Stanford Tokenizer, несколько Amazon EC2.

Page 20: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Fact Extractor

Задача: выделить факты.Факт — это один или больше NE, связка и, возможно, дата.

Сложность: эвристики.

Вход: выделенные NE, связки, Теmporal Expressions, границы предложений.

Решение: custom.

Реализация: custom, несколько Amazon EC2.

Page 21: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 22: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Fact Merger

Задача: выбросить дублирующиеся факты.

Сложность: эвристики.

Вход: выделенные факты, бд фактов.

Решение: custom.

Реализация: custom, несколько Amazon EC2.

Page 23: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 24: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Theme Detector

Задача: определить тему текста.

Сложность: машинное обучение.

Вход: текст страницы.

Решение: Stanfod MaxEnt Classifier.

Реализация: Stanfod MaxEnt Classifier, несколько Amazon EC2.

Page 25: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Pipeline: Feedback Cycle

Задача: дать контроль на каждом шаге.

Сложность: зависит от шаге.

Вход: степень уверенности компонента в его результатах.

Решение: custom.

Реализация: custom, UI, несколько Amazon EC2.

Page 26: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 27: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Page 28: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Начало

Объем: 4 млн документов в сутки.

Скорость: 30 минутный интервал после появления новости.

Решение: AWS EC2, DynamoDB, SQS, RDS, S3.

Page 29: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

Топология

Page 30: Павел Вейник-«Программирование и лингвистика: как понять язык и как извлечь знания из текстов. Реальный

17 октября 2015

? Павел Вейник

enabler @ geomotiv

[email protected]