Project Icon

fixy

创新的土耳其语智能写作纠错与分析工具

Fixy是一个开源的土耳其语写作辅助工具,采用深度学习技术。它能纠正常规拼写错误和语义相关的语法错误,如连词和后缀的使用。项目使用双向LSTM等模型,在大规模数据集上训练,纠错性能优异。此外,Fixy还具备情感分析和正式/非正式语言识别功能。该项目致力于推动土耳其语自然语言处理技术的进步。

团队成员

FIXY

我们的目标是创建一个开源的写作辅助/检查工具,它能够同时解决土耳其语自然语言处理文献中的多个不同问题,提出独特的方法,并弥补文献中研究的不足。我们希望通过深度学习方法解决用户文本中的拼写错误,同时对文本进行语义分析,以识别和纠正在这一背景下出现的错误。

语义拼写纠正

尽管文献中有许多纠正拼写错误的库,但没有一个能够纠正语义上下文中出现的错误。这类错误中最重要的是连词和后缀的情况,如-da/-de、-ki和-mi,它们应该分开或连在一起写。我们的研究完全独特,表现远远优于文献中的所有其他示例。我们尝试了1DCNN、GRU和LSTM RNN等模型,最终选择了表现最佳的双向LSTM模型,并使用贝叶斯搜索优化技术将参数优化到最佳值。

为了使模型在正式和非正式语言中都能表现良好并具有泛化能力,我们合并了三个不同的数据集。这些数据集包括OPUS字幕数据集、TSCORPUS维基百科数据集和TSCORPUS报纸数据集。

在我们的研究中,处理了超过8500万行的数据。在预处理阶段,我们将连接的后缀与单词分开,并用"X"替换。分开的后缀也用"X"替换。这样做是为了使模型在同一句子中出现多个后缀的情况下也能给出更准确的结果。预处理后,包含分开后缀的句子标记为0,包含连接后缀的句子标记为1。然后,为了防止模型学习错误,我们通过随机欠采样减少了数量较多的0和1标签。最终,模型学会了如何正确书写后缀,而不是学习错误。创建的数据集中,20%用作测试数据,10%用作验证数据。您可以在data文件夹中或通过以下标题下的drive链接访问所有CSV格式的数据集。

您可以使用pre_trained_weights文件夹中的权重直接加载并测试模型。或者,您也可以使用我们共享的数据或您自己的数据,以及您创建的模型,通过train笔记本来训练您自己的纠正器。

您可以在以下标题下分别找到性能结果、比较、模型区分的句子示例以及数据集的drive链接。

要求

Python 3.6+

安装项目

git clone https://github.com/Fixy-TR/fixy.git

DEEPCHECKER库

https://pypi.org/project/DeepChecker/

https://github.com/Fixy-TR/DeepChecker

您可以直接通过pip安装我们发布的用于DE-DA、KI和MI纠正的DeepChecker库。

安装库:

   pip install DeepChecker

可用的函数及其用法:

Correct函数返回句子的正确形式。 Check函数返回句子通过sigmoid函数得到的值。接近0表示应该分开写。

from DeepChecker import correct_de, correct_ki, correct_mi, check_de, check_ki, check_mi 

print(correct_de("bu yaz bizimkiler de tatile gelecek")) # 将输出正确形式
print(check_de("bu yaz bizimkiler de tatile gelecek") # 将输出sigmoid值

DE/-DA的文献比较

研究准确率
Fixy87%
博斯普鲁斯大学78%
Google Docs34%
Microsoft Office29%
ITU0%
Libra Office0%

使用博斯普鲁斯大学创建的100个难句进行测试。相关文章

所使用的方法完全原创,与文献中的其他研究采用了不同的方法。性能结果的差异证明了该方法的正确性。

DE-DA、KI和MI所需的库

from google.colab import drive
import pandas as pd
import keras
import pickle
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
import tensorflow as tf
from keras.layers import Dense, LSTM, Flatten, Embedding, Dropout , Activation, GRU, Flatten, Input, Bidirectional, GlobalMaxPool1D, Convolution1D, TimeDistributed, Bidirectional
from keras.layers.embeddings import Embedding
from keras.models import Model, Sequential
from keras import initializers, regularizers, constraints, optimizers, layers

DE-DA纠正器

安装库后,我们加载模型并进行测试。

model.load_weights("/content/Model_deda.h5")
pred = tokenizer.texts_to_sequences(["olsun demek x zor artık"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)
# 接近0的结果表示应该分开写后缀。
array([[0.04085088]], dtype=float32)
  • 测试数据准确率: 92.13%
  • 测试数据ROC AUC: 0.921

混淆矩阵 [336706 20522] [ 36227 327591]

类别精确率召回率F1分数支持度
00.90490.93970.9219357228
10.93840.90300.9204363818

数据 创建的包含3605229行标记-ki数据集的链接: 数据

KI修正器

安装库后,我们加载模型并进行测试。

model.load_weights("/content/Model_ki.h5")
pred = tokenizer.texts_to_sequences(["desem x böyle böyle oldu"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)

# 接近0的结果表示应该分开写后缀。
array([[0.00843348]], dtype=float32)
  • 测试数据准确率: 91.32%
  • 测试数据ROC AUC: 0.913

混淆矩阵 [27113 3311] [ 1968 28457]

类别精确率召回率F1分数支持度
00.93230.89120.911330424
10.89580.93530.915130425

创建的包含304244行标记-ki数据集的链接: 数据

MI-MI-MU-MÜ修正器

安装库后,我们加载模型并进行测试。

model.load_weights("/content/Model_mi.h5")
pred = tokenizer.texts_to_sequences(["olsun demek x zor artık"])
maxlen = 7
padded_pred = pad_sequences(pred, maxlen=maxlen)
model.predict(padded_pred)
# 接近0的结果表示应该分开写后缀。
array([[0.04085088]], dtype=float32)

创建的包含9507636行标记-mi数据集的链接: 数据

  • 测试数据准确率: 95.41%
  • 测试数据ROC AUC: 0.954

混淆矩阵 [910361 40403] [ 46972 903792]

类别精确率召回率F1分数支持度
00.95090.95750.9542950764
10.95720.95060.9539950764

文献中未发现关于ki和mi后缀的研究,这增加了项目的原创性。

语义文本分析

土耳其语情感分析

我们使用三层LSTM神经网络构建模型,用约26万条标记为正面和负面的情感数据进行训练。我们将随机生成的词向量与嵌入层一起添加到神经网络中。经过10轮训练,我们的模型达到了94.57%的准确率。

必要的库

import numpy as np
import pandas as pd
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM,  Dropout
from tensorflow.python.keras.preprocessing.text import Tokenizer
from tensorflow.python.keras.preprocessing.sequence import pad_sequences

安装库后,我们使用keras加载模型。


from keras.models import load_model

model = load_model('hack_model.h5')  # 加载模型

创建测试输入。

#测试评论(输入)
text1 = "böyle bir şeyi kabul edemem"
text2 = "tasarımı güzel ancak ürün açılmış tavsiye etmem"
text3 = "bu işten çok sıkıldım artık"
text4 = "kötü yorumlar gözümü korkutmuştu ancak hiçbir sorun yaşamadım teşekkürler"
text5 = "yaptığın işleri hiç beğenmiyorum"
text6 = "tam bir fiyat performans ürünü beğendim"
text7 = "Bu ürünü beğenmedim"
texts = [text1, text2,text3,text4,text5,text6,text7]

对测试输入进行分词和填充

#分词
tokens = turkish_tokenizer.texts_to_sequences(texts)
#填充
tokens_pad = pad_sequences(tokens, maxlen=max_tokens)

模型预测这些输入更接近哪种情感

for i in model.predict(tokens_pad):
    if i < 0.5:
        print("负面")#发表了负面评论
    else
        print("正面")#发表了正面评论
负面
负面
负面
正面
负面
正面
正面

创建的包含26万行标记为正面-负面的数据集链接: 数据

土耳其语正式-非正式文本分析

我们使用三层LSTM神经网络创建了一个模型,对从Twitter、报纸和维基百科收集的约2,504,900条数据进行了正式(规范)和非正式(不规范)的标注,并用这些数据训练了我们的神经网络。我们将随机生成的词向量与嵌入层一起添加到神经网络中。经过10轮训练,我们的模型达到了95.37%的准确率。

所需库

import numpy as np
import pandas as pd
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM,  Dropout
from tensorflow.python.keras.preprocessing.text import Tokenizer
from tensorflow.python.keras.preprocessing.sequence import pad_sequences

加载库后,我们使用keras加载模型。

from keras.models import load_model

model = load_model('MODEL_FORMAL.h5')  # 加载模型

创建测试输入。

# 创建测试输入
text1 = "atatürk, bu görevi en uzun süre yürüten kişi olmuştur."
text2="bdjfhdjfhdjkhj"
text3 = "hiç resimde gösterildiği gibi değil..."
text4 = "bir yirminci yüzyıl popüler kültür ikonu haline gelen ressam, resimlerinin yanı sıra inişli çıkışlı özel yaşamı ve politik görüşleri ile tanınır. "
text5 = "fransız halkı önceki döneme göre büyük bir evrim geçirmektedir. halk bilinçlenmektedir ve sarayın, kralın, seçkinlerin denetiminden çıkmaya başlamıştır. şehirlerde yaşayan pek çok burjuva, büyük bir atılım içindedir. kitaplar yaygınlaşmakta, aileler çocuklarını üniversitelere göndererek sağlam bir gelecek kurma yolunu tutarak kültürel seviyeyi yükseltmektedir. bağımsız yayıncıların çıkardıkları gazete, bildiri ve broşürler, kitlesel bilinçlenmeye yol açmaktadır. bu koşullar da toplumsal değişim taleplerinin olgunlaşmasına yol açmıştır."
text6 = "bunu çıkardım söylediklerinden"
text7 = "Bu koşullar da toplumsal değişim taleplerinin olgunlaşmasına yol açmıştır."
text8="bu çok saçma yaa"
text9="bana böyle bir yetki verilmedi."
text10="napıcaz bu işi böyle"
text11="Öncelikle Mercedes-Benz'e olan ilgin için teşekkür ederiz."
text12="Ekibimizle çalışma isteğin için teşekkür ediyor, sağlıklı günler ve kariyerinde başarılar diliyoruz. Farklı etkinlik ve programlarda tekrar bir araya gelmek dileğiyle."
text13="Ben de öyle olduğunu düşünmüyordum ama gittik yine de jzns"
texts = [text1, text2,text3,text4,text5,text6,text7,text8,text9,text10,text11,text12,text13]

对测试输入进行分词和填充

#分词
tokens = tokenizer.texts_to_sequences(texts)
#填充
tokens_pad = pad_sequences(tokens, maxlen=max_tokens)

模型预测这些输入更接近哪种情感

#预测测试数据
for i in model.predict(tokens_pad):
  if i < 0.5:
    print("informal")
  else:
    print("formal")
formal
informal
informal
formal
formal
informal
formal
informal
informal
informal
formal
informal
informal

包含1,204,900行标记为正式的数据集链接: 数据 包含3,934,628行标记为非正式的数据集链接: 数据

土耳其语情感文本分析

我们使用一个包含27,350条数据的数据集,这些数据被标记为6种不同的情感(恐惧、快乐、悲伤、厌恶、愤怒、惊讶),训练了SVM linearSVC、MultinomialNB、LogisticRegression和RandomForestClassifier模型。在建模之前,我们使用tfidf向量化器和土耳其语停用词列表对数据中的词进行向量化。在这些模型中,LinearSVC模型获得了最高的准确率。

模型准确率比较

模型准确率
LinearSVC0.80
LogisticRegression0.79
MultinomialNB0.78
RandomForestClassifier0.60

所需库

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import MultinomialNB
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

加载库后,我们使用load_model加载模型并进行测试。

# 加载模型并测试
tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, norm='l2', encoding='latin-1', ngram_range=(1, 2), stop_words=myList)

loaded_model = pickle.load(open("emotion_model.pickle", 'rb'))
corpus = [
         "İşlerin ters gitmesinden endişe ediyorum",
         "çok mutluyum",
         "sana çok kızgınım",
         "beni şaşırttın",
        ]
tfidf.fit_transform(df.Entry).toarray()
features = tfidf.transform(corpus).toarray()
result = loaded_model.predict(features)
print(result)
['Fear' 'Happy' 'Anger' 'Suprise']

我们从TREMODATA获取了用于此模型的数据集。此数据集的drive链接:数据

fixy_app(Flask API)

您可以使用虚拟环境中创建的Flask API在界面上展示模型。所需的库有:

from flask_wtf import FlaskForm
from flask import Flask, request, render_template,redirect
import pickle
import re
from wtforms.validators import DataRequired
import pandas as pd
from os.path import join

运行app.py文件可以将模型连接到前端。

alt text

alt text

基于规则的纠错器和更正式的方法

在后端,我们使用了Zemberek的Normalization模块进行基于规则的纠错。此外,我们还使用了Zemberek的Informal Word Analysis模块来查看文本的更正式版本。

生成噪声数据

为了让基于深度学习的拼写检查模型学习拼写错误,我们需要生成正确句子-错误句子对的数据。我们确定了土耳其语中常见的拼写错误,并使用它们创建了损坏正确单词的噪声函数。这样我们就可以获得模型所需的噪声数据。您可以在Noice_Adder_Functions.ipynb文件中找到这些函数。

清理后的维基百科数据集

您可以在任何土耳其语NLP研究中使用这个包含2,364,897行的清理后的土耳其语维基百科数据集:) 维基百科数据集

参考文献

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号