предисловие
Эта статья кратко знакомит с концепцией автоматического суммирования текста и предлагает несколько простых и осуществимых идей и решений. Основная функция состоит в том, чтобы записать некоторые события и надеяться, что читатели могут получить вдохновение. На данном этапе есть очень зрелые и мощные решения для автоматического суммирования текста с учителем.Однако умной женщине трудно готовить без еды.Без ручной разметки сводки метод с учителем ничего не может сделать. При отсутствии размеченных данных более практичными являются неконтролируемые методы.
Базовые концепты
Что такое автоматическое суммирование текста?
Automatic text summarization is the task of producing a concise and fluent summary while preserving key information content and overall meaning.
Короче говоря, реферирование текста — это задача создания кратких и беглых рефератов из исходных текстов с сохранением основного содержания и сути. Вообще говоря, источником автоматического реферирования текста может быть один или несколько текстов, а количество слов после реферирования составляет примерно половину исходного текста.
Два метода автоматического суммирования текста
1. Extraction
Как следует из названия, он предназначен для определения важных частей текста и их извлечения в виде сводки текста.
2. Abstraction
Этот метод заключается в использовании более продвинутой технологии обработки естественного языка для создания рефератов, содержащих важную информацию об исходном тексте.Этот метод включает семантическое представление, вывод и генерацию естественного языка, которые являются сложными для решения проблемами.
Вообще говоря, эффект от извлечения лучше, чем от абстрагирования, тем более, что готовые абстрактные суммировщики должны в той или иной степени включать в себя какие-то компоненты извлечения, остановимся на методе извлечения.
Методика обобщения извлечения
Систему автоматического суммирования извлечения можно условно разделить на следующие три независимых шага:
- Построить представление (представление), содержащее основную информацию текста.
- Предложения оцениваются на основе построенного представления.
- Предложения, составляющие аннотацию, выбираются на основе оценок.
Таким образом, мы преобразуем сложную задачу автоматического суммирования в три независимые подзадачи.Когда первая и вторая проблемы решены, третья часть состоит в том, чтобы выбрать верхнюю задачу k, то есть решить первые две проблемы. третья проблема легко решается.
Введение в методы характеристики
Обзор
Обычно используемые методы представления текста можно в основном разделить на два типа: представление темы и представление индикатора.
Представление темы заключается в преобразовании текста в представление тем, участвующих в интерпретации текста.Среди них в представлении темы есть относительно простые методы, основанные на частоте слов, LSA и LDA и т. Д. После завершения представления , для определения порога фильтрации важных предложений используется статистический метод.
Представление индикатора заключается в преобразовании текста в определенные функции, такие как длина предложения, содержит ли он определенные слова и положение предложения и т. д. Затем напрямую оценивайте и сортируйте, чтобы извлечь важные предложения.
Далее основное внимание уделяется двум простым представлениям индикаторов и методам оценки.
Графический подход: от PageRank к TextRank
Основная мысль:
Графический метод хорошо известен.pagerankалгоритмическое воздействие,pagerankОсновная идея алгоритма заключается в том, что важность веб-страницы зависит от важности всех других веб-страниц, указывающих на эту веб-страницу, и количества ссылок, содержащихся на этих веб-страницах. Так же,В тексте важность предложения также зависит отвокругважность фразы.
Обычно при построении графа мы используем вершины для представления предложений, а ребра — для представления сходства между предложениями. Наиболее распространенный метод заключается в измерении косинусного сходства TFIDF между двумя предложениями и соединении двух предложений при превышении определенного порога. Здесь используется более тривиальный и наивный метод, заключающийся в использовании метода скользящего окна для установления локальной связи между предложениями.
Сначала наш ввод представляет собой длинный текст, например:
Хотя смартфонам Sharp пока не удавалось занимать высокие позиции на рынке, они полностью пришли в упадок и ушли с китайского рынка в 2013 году, но в марте этого года состоялось официальное объявление об их возвращении в Китай, свидетельствующее о том, что новые смартфоны Sharp будет запущен в Китае в ближайшее время. Итак, когда первый телефон Sharp появится в Китае? Что это будет за телефон? \r\nНедавно таинственная новая машина Sharp с номером модели FS8016 незаметно появилась в библиотеке тестов GeekBench. Из соответствующей информации следует, что этот аппарат не является флагманским позиционированием, он оснащен процессором Qualcomm Snapdragon 660 и оснащен 4 ГБ памяти. Snapdragon 660 — один из самых громких чипов Qualcomm в этом году, использующий 14-нанометровый техпроцесс с восемью ядрами Kryo 260, встроенным графическим процессором Adreno 512 и модемом X12 LTE. \r\nВ настоящее время на рынке есть только один телефон, использующий процессор Snapdragon 660, и это OPPO R11, который уже есть на рынке. Хотя Snapdragon 660 не является флагманским чипом, он сильнее прошлогоднего Snapdragon 820 с точки зрения новой многоядерной энергии, и одноядерное улучшение также очевидно, поэтому он по-прежнему может превратить многие мобильные телефоны в высокопроизводительные машины. в этом году. Однако из-за эксклюзивного соглашения, подписанного OPPO и Qualcomm, его можно использовать исключительно в течение двух или трех месяцев. \r\nУчитывая, что Sharp начала тестировать новый телефон, это означает, что пока эксклюзивный период истек, Sharp сможет выпустить новый Snapdragon 660. Согласно ранее опубликованным визуализациям, основным конкурентным преимуществом нового телефона Sharp по-прежнему является полноэкранный режим, поскольку с момента выпуска первого в мире полноэкранного мобильного телефона EDGEST 302SH в 2013 году компания Sharp выпустила целых 28 полноэкранных мобильных телефонов. . \r\nНа встрече со СМИ в мае HP Луо Чжуншэн сказал: «Держу пари, что через 12 месяцев все здесь заменят свои мобильные телефоны. Из-за наступления полноэкранной эры мобильные телефоны, которые мы носим, станут Традиционный сотовый телефон».
Нам нужно разделить предложения пунктуацией, например
import re
def split_sentences(text,p='[。.,,?:]',filter_p='\s+'):
f_p = re.compile(filter_p)
text = re.sub(f_p,'',text)
pattern = re.compile(p)
split = re.split(pattern,text)
return split
print(split_sentences(text)[:10])
#out:
'''
['虽然至今夏普智能手机在市场上无法排得上号', '已经完全没落', '并于2013年退出中国市场', '但是今年3月份官方突然宣布回归中国', '预示着很快就有夏普新机在中国登场了']
'''
Эта функция разделит текст на список предложений.
Затем мы можем построить график с помощью библиотеки networkx:
import networkx
def get_sen_graph(text,window=3):
split_sen = split_sentences(text)
sentences_graph = networkx.graph.Graph()
for i,sen in enumerate(split_sen):
sentences_graph.add_edges_from([(sen,split_sen[ii]) for ii in range(i-window,i+window+1)
if ii >= 0 and ii < len(split_sen)])
return sentences_graph
Затем используйте алгоритм рейтинга страниц, чтобы подсчитать оценку предложения и отсортировать ее.
def text_rank(text):
sentences_graph = get_sen_graph(text)
ranking_sentences = networkx.pagerank(sentences_graph)
ranking_sentences_sorted = sorted(ranking_sentences.items(),key=lambda x:x[1],reverse=True)
return ranking_sentences_sorted
Наконец, выберите важные предложения и соедините их вместе.
def get_summarization(text,score_fn,sum_len):
sub_sentences = split_sentences(text)
ranking_sentences = score_fn(text)
selected_sen = set()
current_sen = ''
for sen, _ in ranking_sentences:
if len(current_sen)<sum_len:
current_sen += sen
selected_sen.add(sen)
else:
break
summarized = []
for sen in sub_sentences:
if sen in selected_sen:
summarized.append(sen)
return summarized
def get_summarization_by_text_rank(text,sum_len=200):
return get_summarization(text,text_rank,sum_len)
print(' '.join(get_summarization_by_text_rank(text)))
#out:
'''
但是今年3月份官方突然宣布回归中国 预示着很快就有夏普新机在中国登场了 那么 第一款夏普手机什么时候登陆中国呢
又会是怎么样的手机呢 近日 一款型号为FS8016的夏普神秘新机悄然出现在GeekBench的跑分库上 从其中相关信息了解到
因为从2013年推出全球首款全面屏手机EDGEST302SH至今 夏普手机推出了多达28款的全面屏手机 在5月份的媒体沟通会上
惠普罗忠生表示 “我敢打赌 12个月之后 在座的各位手机都会换掉
'''
Таким образом изначально реализована простая текстовая сводка на основе графа, но по этой реализации из-за простоты метода эффект тоже так себе. Но есть ли у вас хорошие способы построения графиков? Здесь, как определить предложение "вокруг" имеет решающее значение. Помимо TFIDF, является ли LSA хорошим методом представления, возможно, стоит попробовать word2vec и Doc2vec!
Метод, основанный на встраивании предложений (встраивание предложений)
Основная мысль:
Фактически определение важных предложений в тексте можно рассматривать как измерение сходства между каждым предложением в тексте и полным текстом: чем выше сходство, тем важнее предложение. Следовательно, нам нужно только выполнить встраивание предложения в полный текст и его предложения и вычислить косинусное сходство между вектором представления предложения и вектором представления полного текста, и тогда мы можем грубо извлечь важные предложения.
Эта часть требует большой подготовительной работы: сначала прочитать данные для сегментации слов, а затем обучить вектор слов (word2vec), конечно, вы также можете использовать предварительно обученные векторы слов
import pandas as pd
import numpy as np
import jieba
from gensim.models import FastText
FILE_PATH = 'news.zip'
news_df = pd.read_csv(FILE_PATH,compression='zip',encoding='gb18030')
#定义分词函数
def cut(text): return ' '.join(jieba.cut(text))
main_content = pd.DataFrame()
main_content['title'] = news_df['title']
main_content['content'] = news_df['content'].fillna('')
main_content['tokenized_content'] = main_content['content'].apply(cut)
#训练词向量
with open('all_corpus.txt','w',encoding='utf-8') as f:
f.write(' '.join(main_content['tokenized_content'].tolist()))
from gensim.models.word2vec import LineSentence
model = FastText(LineSentence('all_corpus.txt'),window=8,size=200,iter=10,min_count=1)
tokens = [token for line in main_content['tokenized_content'].tolist() for token in line.split()]
Рассчитать частоту слов
from collections import Counter
token_counter = Counter(tokens)
word_frequency = {w:counts/len(tokens) for w,counts in token_counter.items()}
Для встраивания предложений используйте относительно простое встраивание SIF (smooth-inverse-frequency), специальный алгоритм
Для простоты часть pca/svd пропущена.
def SIF_sentence_embedding(text,alpha=1e-4):
global word_frequency
max_fre = max(word_frequency.values())
sen_vec = np.zeros_like(model.wv['测试'])
words = cut(text).split()
words = [w for w in words if w in model]
for w in words:
fre = word_frequency.get(w,max_fre)
weight = alpha/(fre+alpha)
sen_vec += weight*model.wv[w]
sen_vec /= len(words)
#skip SVD
return sen_vec
Вычислите оценку косинуса и объедините извлеченные предложения
from scipy.spatial.distance import cosine
def get_corr(text,embed_fn=SIF_sentence_embedding):
if isinstance(text,list): text = ' '.join(text)
sub_sentences = split_sentences(text)
sen_vec = embed_fn(text)
corr_score = {}
for sen in sub_sentences:
sub_sen_vec = embed_fn(sen)
corr_score[sen] = cosine(sen_vec,sub_sen_vec)
return sorted(corr_score.items(),key=lambda x:x[1],reverse=True)
def get_summarization_by_sen_emb(text,max_len=200):
return get_summarization(text,get_corr,max_len)
print(''.join(get_summarization_by_sen_emb(main_content['content'].iloc[6])))
#out:
'''
已经完全没落并于2013年退出中国市场 但是今年3月份官方突然宣布回归中国 预示着很快就有夏普新机在中国登场了
那么 又会是怎么样的手机呢 近日从其中相关信息了解到 八个Kryo260核心设计 但在多核新能上比去年骁龙820强单核改进也很明显
不过由于OPPO与高通签署了排他性协议 可以独占两三个月时间 说明只要等独占时期一过 按照之前被曝光的渲染图了解
在5月份的媒体沟通会上 惠普罗忠生表示 “我敢打赌12个月之后在座的各位手机都会换掉 因为全面屏时代的到来
'''
Таким образом, реферирование текста на основе встраивания предложений завершено.Здесь мы обсуждаем только простой метод, который можно комбинировать с двумя представленными методами для создания более мощной и эффективной системы автоматического реферирования текста.
Улучшить идеи
- В сочетании с идеей алгоритма KNN сгенерированная текстовая сводка становится более плавной и читабельной. В соответствии с оценкой предложения нарисуйте распределение оценок предложения:
- Учитывайте ключевые слова. В тексте предложения с ключевыми словами часто содержат более важную информацию.Когда предложение содержит больше ключевых слов, оценка этого предложения должна быть соответствующим образом увеличена.
- Рассмотрим заголовок. Если у вашего текста есть заголовок, то в заголовке уже содержится важная информация, и заголовок следует учитывать при реферировании.
- Учитывайте положение предложения. При чтении начало, конец, начало абзаца и конец абзаца почти все играют роль ведения всего текста, обобщая или связывая предыдущее и последующее.В реферате положение предложения также необходимо учитывать.
- В сочетании с тематическими моделями, такими как LDA. По темам, обобщенным LDA, мы можем сопоставить их с пунктами и учесть темы в аннотации.
После обсуждения здесь, я считаю, что у вас довольно много идей, и вы можете построить свою собственную систему автоматического реферирования текста!
Ниже приведено немного улучшенное резюме:
Подождите, есть еще одна проблема.После того, как предложения снова объединены, оригинальные знаки препинания теряются.Что мне делать? (Подсказка: здесь следует установить соответствие между предложениями и пунктуацией.) Найдите минутку, подумайте об этом и будьте достаточно умны, чтобы реализовать полную систему реферирования текста!
использованная литература
- Text Summarization Techniques: A Brief Survey
- A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SENTENCE EMBEDDINGS
Спасибо
Спасибо за ваше терпение при чтении моей статьи. Комментарии и исправления приветствуются. Я надеюсь общаться с вами и вместе добиваться прогресса.
Спасибо моему советнику господину Гао, а также моим одноклассникам и друзьям, которые активно обсуждали и решили проблему!