将相似词分组

数据挖掘 机器学习 深度学习 分类 nlp 词嵌入
2022-03-02 07:33:40

数组(['Ruby on Rails','Ruby','AWS DynamoDB','Python','MySQL','Swift','Android','iOS','JavaScript','React Native','ReactJS' , 'TypeScript', 'Vue.js', 'Webpack', 'Amazon Web Services(AWS)', 'Kubernetes', 'PHP', 'CI/CD', 'Java', 'C#', 'C', 'Node.js'、'REST API'、'Go'、'Redux-Saga'、'Redux.js'、'Babel'、'GraphQL'、'Tensorflow'、'PyTorch'、'Jenkins'、'Spring' ,'Django','Git','AWS EC2','CSS','HTML','MongoDB','Docker','Scala','SQL','嵌入式系统','NLP','Apache','Kotlin','Angular','jQuery','C++','RxJS','AngularJS','Redis','Next.js','NoSQL', 'GCP(谷歌云平台)'、'Elasticsearch'、'OpenStack'、'JPA(Java Persistent API)'、'TCP/IP'、'Objective-C'、'Realm'、'Firebase'、'Ajax'、 'Linux'、'PostgreSQL'、'ES6'、'AWS Lambda'、'HTML5'、'AWS S3'、'GitHub'、'RxSwift'、'Terraform'、'AWS EKS'、'AWS RDS'、'Microsoft Azure'、'Sass(SCSS)'、'CodeIgniter'、'Flask'、'Nuxt.js'、'Ansible'、'Spring Boot'、'Linux 内核”、“Apache Kafka”、“深度学习”、“Nginx”、“ActionScript”、“OOP”、“Shell”、“gulp”、“Celery”、“SQLAlchemy”、“ExpressJS”、“RxJava”、 “Apache Spark”、“WebGL”、“OpenGL”、“机器学习”、“MSSQL(Microsoft SQL Server)”、“数据库”、“样式组件”、“MVC”、“改造”、“机器视觉”、 'Oracle'、'web3.js'、'R'、'AWS ElasticBeanstalk'、'Elastic Stack'、'Laravel'、'ASP.NET'、'Aurora DB'、'Redux-Observable'、'.NET'、 “AWS 备份”、“AWS CloudWatch”、“Kibana”、“Fluentd”、“Logstash”、'JSP'、'Bootstrap'、'Datadog'、'Rust'、'Azure'、'Apache Hadoop'、'AWS X-Ray'、'Memcached'、'Jest'、'Mocha'、'DRF(Django REST 框架)'、'Spring Cloud'、'Data Analysys'、'大数据'、'GitLab'、'Gradle'、'SQLite'、'Microsoft IIS'、'Unity'、'Electron'、'MariaDB'、'mSQL' , 'gensim', 'Scikit-Learn', 'AWS 简单队列服务 (AWS SQS)', 'gRPC', 'Naver 云平台', 'Ubuntu', '微服务架构', 'Apache ActiveMQ', 'Oracle 数据库' , 'Apache Subversion(SVN)', 'Apache Tomcat', 'Red Hat Ceph Storage', 'Puppeteer', 'OpenLayers', 'Vuex', 'Less.js', 'JIRA', 'Keras', 'NCP(Naver Cloud Platform)', 'NestJS', 'PKI(Public key)基础设施)','AWS ECS','Hibernate','UML','BitBucket','Arduino','Raspberry Pi','RabbitMQ','Capistrano','Bamboo','MVP','OkHttp', 'Cocos2d'、'以太坊'、'区块链'、'DSP(数字信号处理)'、'D3.js'、'Cocoa'、'Axios'、'Ionic'、'WPF'、'AWS IAM'、'Shell脚本”、“响应式 Web”、“画布”、“ThreeJS”、“Apache ZooKeeper”、“熊猫”、'Spring Batch'、'JUnit'、'Spring Data JPA'、'ASP'、'Grunt'、'WordPress'、'MyBatis'、'AWS ElastiCache'、'Apache HTTP Server'、'AWS Security Hub'、'Google API'、'Qt'、'CAD'、'GatsbyJS'、'PostCSS'、'Socket.IO'、'Backbone.js'、'Azure Linux 虚拟机'、'Heroku'、'CUDA'、'IOCP'、 'Unix'、'CocoaPods'、'MVVM(Model-View-ViewModel)'、'Google Firebase Crashlytics'、'Google Cloud Platform'、'Windows 内核'、'OpenCV'、'Unreal Engine'、'Google Cloud SDK' , 'RxAndroid', 'Windows Embedded', 'Entity Framework', 'Packer','Nexus'、'Consul'、'Selenium'、'Jekyll'、'XML'、'Dependency Lookup'、'RxKotlin'、'Expo'、'Sketch'、'InVision'、'Azure Text Analytics'、'Google Dialogflow ', '谷歌云自然语言'], dtype=object)

假设我有这个数组列表
,如果我想按类似的东西对它们进行分组,是否有任何预训练的语言模型可以更轻松地完成这项工作?


例如
pytorch 和 tensorflow 应该在一组,因为大多数深度学习的人都在使用 pytorch 或 tensorflow

3个回答

不会有任何预先训练的模型来聚类这些单词。

事实上,为了构建您自己的聚类模型,您将需要更多关于数组中每个观察/单词的元数据。

目前,任何模型都只能“看到”阵列中的软件包/软件的名称。因此,您可能希望的最好结果是根据拼写对这些单词进行聚类的模型。

现在让我们假设您找到了每个软件的简要说明,现在您可以做更多的事情。有了这个较长的文本,您可以使用有监督或无监督的方法根据描述中的相似词将这些软件分组(参见主题模型、k-means 等)。

长话短说,没有预先构建的模型可以做到这一点,并且要自己构建一个,您将需要有关每个观察的更多信息。

通过使用 SpaCy 的预训练XLNet 模型,我得到了一些有趣的相似之处。我使用这个模型是因为它已经在大规模语料库上进行了训练,该语料库首先很有可能包含这些特定于领域的术语。但正如@yohanes-alfredo 指出的那样,唯一有意义的相似之处是模型训练的数据是否特定于您的领域。鉴于该特定域,开箱即用地找到您要查找的内容的可能性很小

最相似的前 20 名:

RxSwift ~ RxKotlin -> 0.9946681187244761
RxJS ~ RxJava -> 0.994435118373502
GCP(Google Cloud Platform) ~ NCP(Naver Cloud Platform) -> 0.9940396059556209
AWS EC2 ~ AWS ECS -> 0.9938487260023671
PKI(Public key infrastructure) ~ AWS ElastiCache -> 0.9935761603450172
GCP(Google Cloud Platform) ~ DSP(Digital Signal Processing) -> 0.9933073878775022
Elasticsearch ~ Elastic Stack -> 0.9931518747103965
AWS EC2 ~ AWS S3 -> 0.993027042898852
PKI(Public key infrastructure) ~ DSP(Digital Signal Processing) -> 0.9929990959502415
Vue.js ~ Node.js -> 0.9929247105854434
AWS Lambda ~ AWS Security Hub -> 0.9929128319080022
NCP(Naver Cloud Platform) ~ DSP(Digital Signal Processing) -> 0.9929057627676084
SQLite ~ mSQL -> 0.9926240872662073
DRF(Django REST framework) ~ DSP(Digital Signal Processing) -> 0.9925413265716948
Vue.js ~ Nuxt.js -> 0.9924630128845782
Node.js ~ Nuxt.js -> 0.9921168820574993
jQuery ~ SQLAlchemy -> 0.9920563002593914
GCP(Google Cloud Platform) ~ PKI(Public key infrastructure) -> 0.9919737922646894
NCP(Naver Cloud Platform) ~ PKI(Public key infrastructure) -> 0.9918400179111244
AWS EKS ~ AWS RDS -> 0.9916245806804818

最不相似的前 20 名:

HTML ~ Redux-Observable -> 0.816905641379557
HTML ~ Apache ZooKeeper -> 0.8168242467737211
HTML ~ CocoaPods -> 0.8166225352469929
HTML ~ GitHub -> 0.8161220718380207
HTML ~ AngularJS -> 0.8158469544232246
Ruby ~ WordPress -> 0.8154201995919186
Node.js ~ HTML -> 0.813844641023879
HTML ~ GatsbyJS -> 0.8132731528363577
Vue.js ~ HTML -> 0.8119781923186943
Blockchain ~ WordPress -> 0.8116576909602091
HTML ~ Sass(SCSS) -> 0.811630090065908
HTML ~ Nuxt.js -> 0.8109416869322942
Firebase ~ WordPress -> 0.8097501937747014
Java ~ WordPress -> 0.8093956474318938
Linux ~ WordPress -> 0.8089260791066558
Laravel ~ WordPress -> 0.8082594491867635
Redux.js ~ HTML -> 0.8079252976547562
WordPress ~ InVision -> 0.8077375338404283
HTML ~ DRF(Django REST framework) -> 0.8070652034839725
MySQL ~ WordPress -> 0.8070553577302257

我的看法是,首先,所有这些术语都具有相当高的相似性,可能是因为它们都是相似的通用域的一部分。其次,最重要的相似性似乎完全受字符串相似性的影响。确实,如果您查看最近的邻居,它们似乎与概念本身并没有那么相关。例如,以下是“CI/CD”的前 5 个邻居:

CI/CD

CI/CD ~ CI/CD -> 1.0000001314622171
CI/CD ~ CUDA -> 0.9898242832223353
CI/CD ~ gensim -> 0.9896900420172526
CI/CD ~ SQLite -> 0.9890342868864949
CI/CD ~ mSQL -> 0.9883379829169077

然而,这是一个开始。此外,SpaCy 提供您可以体验的不同模型。

如果没有任何关于语言的上下文,这几乎是不可能的。仅此而已,您至少可以使用 levenshtein 距离并基于此计算集群。想象一下,假设一个没有软件工程知识的普通人,我认为人们甚至无法完成您要求的任务。人们如何在没有事先上下文的情况下知道 pytorch 和 tensorflow 是否相关。

另一种方法是使用 StackOverflow 中的文本进行无监督训练,训练后提取这些单词的嵌入,计算相似度/距离并使用聚类方法生成聚类。