精华内容
下载资源
问答
  • 教科小学科学四年级下生活中的静电现象PPT教案.pptx
  • 《指导生活的算法:人类决策的计算机科学》是16年4月出版的书,全名《Algorithms to Live By: The Computer Science of Human Decisions》,作者是Brian Christian & Tom Griffiths。这本书的主要内容是如何用算法...
    《指导生活的算法:人类决策中的计算机科学》是16年4月出版的书,全名《Algorithms to Live By: The Computer Science of Human Decisions》,作者是Brian Christian & Tom Griffiths。这本书的主要内容是如何用算法来做生活中的决策,接下来就借着《精英日课》的解读谈谈我的理解。
      
    先由一个例子来引出话题,现在你面临了一个买房子的问题。假设是以下这样的(可能跟现实有出入):
    • 随机地遇到各种房子,但是只买一套。
    • 如果看完房后选择购买,那么它就是你的了。
    • 如果选择不买,就会被别人买走,没有第二次机会。
    • 设定一个看房期限,只有一个月来做决定。
    重点是把问题抽象出来,才能用算法进行分析。数学家在买房问题上的原则是: 37%原则。即把买房分成两个阶段,
    第一阶段:前37%的时间用来看房,即12天。(一个月30天*37%=11.1)
    第二阶段:后18天进行决策,如果看到的房子比第一阶段的号,就买下来。
    这个决策可能不能保证你买到最好的房子。但它能让你买到足够好的房子。而且这样决策是处在理性情况下做出的,没有太多的纠结与痛苦。好了,说了这个例子,可以引出本书的主要内容了。
    1.数学家告诉你该什么时候结束单身
         具体到择偶问题上,假设你从18岁开始找对象,设定在40岁之前结婚,同样也可以采用37%原则,在26岁(即37%)之前是观察期,在此期间可以只交往不结婚,26岁之后如果有比之前更好的,就应该结婚。当然了,择偶不能这么草率,因此数学家在37%原则基础上进行了优化。如果你在18到26岁之间碰到的人当中还有人愿意跟你“再续前缘”,那么观察期可以从前37%提高到61%,与买房相同,这种决策方法不会导致自己太早结婚或者成为大龄剩女这两种极端。 一个理性的人,要知道何时停止!不过对于已有伴侣或者对爱情有着自己独到的理解的话,自然可以采用自己的方法。毕竟选另一半不是买房子。
    2.数学家告诉你如何慢慢变老
         在生活过程中, 探索新事物珍惜当下一直是一个矛盾。从临终老人的“后悔自己年轻时没去做的事”到“邻居家的草坪更好”,前者涉及到探索,后者涉及到珍惜。(总感觉怪怪的,还是在下文增加些例子吧)。总的来说,我们 到底在什么情况下探索新事物,什么情况下专注于已有的事物呢?其实这是一个数学问题。比如你家附近有个餐馆,去过15次,其中9次的体验非常好,6次的体验非常不好。明晚是否该去这家餐馆吃饭呢?数学家提出了“ 基廷斯指数”的决策方法。

    上图是基廷斯指数的表,以餐馆的例子来说明一下,9次体验好对应Wins 9,6次体验不好对应Losses 6 .二者结合起来对应的概率是0.6997,即最后一列倒数第四个。而对于新餐馆而言,Wins和Losses都是0,对应的概率是表中第一个0.8699.因此你们应该去新餐馆。如果想进一步的决策,可以加入37%原则作为额外的权重,就当自己能活100岁吧,37岁之前可以多去新餐馆,权重为0.6,去旧餐馆的权重为0.4(1-0.6=0.4).总的决策结果就是去新餐馆的概率是0.8699*0.6=0.5214.去老餐馆的概率是0.6997*0.4=0.27988.更应该去新餐馆了!!而老人偏爱一些经常去的餐馆也可以通过37%原则和基廷斯指数表得到证明。老人们只是在享受自己年轻时不断尝试后所得到的结论而已。
    3.数学家告诉你为何难得糊涂
         在统计学中,有一个方法叫做“拟合”,就是用有限点来估计得到一个曲线的过程。例如一个婚后时间与生活满意度的调查如下
                                          
    左图是调查结果,即横坐标对应结婚时间,纵坐标对应满意度,由这些散点进行拟合的结果如右图,如果用一次函数、二次函数来拟合的话差别不大,而如果像图中实现那样的曲线就是“过拟合”了。你想要模型反映已知的所有数据,拟合准确度越高,但对未来的预测效果越差。因此, 必须抓住重点,主动忽略掉一部分信息
    4.数学家推荐的时间安排方法
         在工作中常常会碰到多任务一起处理的情况,如何安排先后顺序也是个头疼的问题。数学家给的方法很简单: 一个任务的密度=重要程度/完成时间。衡量重要程度的指标有很多,比如带来的收入。第一个任务能带给你200块,需要1小时。第二个任务能带给你300块收入,但是需要3小时。第一个任务的密度是200,第二个任务是100.那么你应当首先做第一个任务。这个算法的关键在于 重要程度的“量化”,即判断事情的重要程度,这个取决于客观情况和你的主观意愿。如果你再做任务1的时候突然来了一个新的任务,就将新任务的密度与任务1相比,得到结果。

    总结:《指导生活的算法:人类决策中的计算机科学》这本书说的是一个让人决策简单化的方法,在工作生活中需要耗费的精力太多的,但精力又是有限的,因此可以把一些决策用算法的方式来计算并执行,毕竟还要留有精力去享受生活!这才是算法带给我们的帮助,省下不必要的精力花费去做更值得做的事~
    展开全文
  • 数学不是脱离生活的,而是源于生活,更要回归于生活。解决生活中遇到的问题,就是最自然的数学应用题。 生活场景的学习,是最生动的体验式学习机会。用学到的数学知识来解决生活中...

    640?wx_fmt=gif


    数学不是脱离生活的,而是源于生活,更要回归于生活。解决生活中遇到的问题,就是最自然的数学应用题。

     

    生活场景中的学习,是最生动的体验式学习机会。用学到的数学知识来解决生活中的问题,正是孩子体会数学奥妙的绝佳机会。


    不少孩子在课堂上学到了数学知识,却不知道如何把这些本领和生活中遇到的问题关联起来。


    “数学帮帮忙·互动版”系列的每一本书都会讲述一个发生在孩子身边的故事,由故事中出现的问题自然地引入一个数学知识,通过运用数学知识来解决实际生活问题。


    由全美专业教育团队编撰

    适合5~8岁孩子的数学故事书


    640?wx_fmt=jpeg


    《数学帮帮忙》是一套从美国引进的数学读物,来自凯恩出版社的Math Matters。


    这套曾荣获美国《学习杂志》教师推荐儿童读物奖、全美社科类童书奖、入选美国各州图书馆馆藏书目的《数学帮帮忙》系列儿童故事读本,是由美国专业儿童教育类图书出版机构“凯恩出版社”编辑出版,非常适合5至8岁孩子阅读和学习。

     

    “凯恩出版社”是由在美国少儿教育界享有盛誉的儿童心理学博士――凯恩社长领军,曾多次参与美国各州中小学教材的编修与审订工作。


    除自身拥有众多少儿教育出版领域的资深编辑之外,凯恩出版社邀请的作家与插画家几乎都是耳熟能详的国际获奖者。


    640?wx_fmt=jpeg


    《数学帮帮忙》

    原价360元

    玩酷屋粉丝特惠价:239元!


    640?wx_fmt=jpeg


    双十一领券下单更优惠!

    还有礼品赠送哦

    640?wx_fmt=gif

    640?wx_fmt=png


    关注【玩酷屋Cool】服务号

    这里有

    趣味科学的视觉盛宴

    数学思维的聚集地

    孩子成长的伴随者

    640?wx_fmt=gif

    640?wx_fmt=gif


    玩酷屋——超级数学建模自营店640?wx_fmt=png

    640?wx_fmt=gif 点击“阅读原文"立即购买


    展开全文
  • 知识图谱是数据科学中最吸引人的概念之一 学习如何使用Wikipedia页面的文本构建知识图谱 Python使用流行的spaCy库Python构建知识图谱 引言 不用过多介绍,大家都知道梅西。即使是那些不关注足球的人,...

    全文共6382字,预计学习时长20分钟

    图源:Unsplash摄影:Clem Onojeghuo

    概览

    • 知识图谱是数据科学中最吸引人的概念之一
    • 学习如何使用Wikipedia页面中的文本构建知识图谱
    • 在Python中使用流行的spaCy库在Python中构建知识图谱

    引言

    不用过多介绍,大家都知道梅西。即使是那些不关注足球的人,也听说过这位最伟大球员在辉煌。下面是他的维基百科页面:

     

    这个页面包含了很多信息!里面不仅有文本、大量的超链接,甚至还有音频片段。整个网页上有很多相关的和可能会有用的信息,将它们应用到实际生活中可能性是无穷的。

    然而,还有一个小问题。这不是给机器提供数据的理想来源,至少不是以现在的这种形式。

    是否能找到一种方法,使这些文本数据变为机器可读?能否将这些文本数据转录成既让机器可以使用,也能让我们可以轻松解释的东西?

    答案是肯定的。我们可以借助知识图谱(KG),这是数据科学最吸引人的概念之一。我已经被知识图谱的巨大潜力和实际应用震惊了,我相信你也会和我一样。

    在本文中,你将了解什么是知识图谱,以及它们的作用,然后我们将基于从维基百科中提取的数据,来构建知识图谱以用于深入研究代码。

    目录

    1. 什么是知识图谱?

    2. 如何在图谱中表示知识?

    ○ 句子分割

    ○ 实体抽取

    ○ 关系抽取

    3. 依靠文本数据构建知识图谱

     

    什么是知识图谱?

    先明确一个概念:在本文中经常出现的术语“图谱”,并不是指柱状图、饼状图或线状图,而是相互关联的实体,它们可以是人、地点、组织,甚至是一个事件。

    不妨说,图谱是节点和边*的组合。

    看看下面的数据:

    *边(Edge)是节点间的连线,用于表示节点间关系。

    这里的节点a和节点b是两个不同的实体,节点通过边连接。如图是我们可以构建的最小的知识图谱——它也被称为三元组(实体-关系-实体)。

    知识图谱有多种形状和大小。例如,截至2019年10月,维基数据(Wikidata)的知识图谱有59,910,568个节点。

     

    如何在图谱中表示知识?

    在开始构建知识图谱前,我们需要了解信息或知识是如何嵌入到这些图谱中的。

    举例来解释:如果节点a=普京,节点b=俄罗斯,那么边很可能是“俄罗斯总统”:

     

    一个节点或实体也可以有不止一个关系。普京不仅是俄罗斯总统,他还曾为苏联安全机构克格勃工作。但是如何把这些关于普京的新信息,整合到上面的知识图谱中呢?

    其实很简单。只需为新实体“克格勃”再添加一个节点:

     

    新的关系不仅可以添加在第一个节点,而且可以出现在知识图谱中的任何节点,如下所示:

    俄罗斯是亚太经济合作组织(APEC)的成员国

    识别实体和他们的相互关系并不是一项困难的任务。但是,手动构建知识图谱是难以处理大量信息的。没有人会浏览成千上万的文档,然后提取出所有的实体和它们之间的关系。

    因此,机器无疑是更好的选择,浏览成百上千的文件对它们来说简直小菜一碟。但是还有另外一个挑战——机器不懂自然语言。这就轮到自然语言处理 (Natural Language Processing,简称NLP) 技术出场了。

    想要从文本中构建知识图谱,让机器能理解自然语言就至关重要。这可以通过使用自然语言处理(NLP)技术来实现,如句子分割、依存句法分析、词性标注和实体识别。下文将更详细地对它们进行探讨。

    句子分割

    构建知识图谱的第一步是将文本或文章分割成句子。然后,列出那些只有一个主语和宾语的句子。下面是示例文本:

    “在最新的男子单打排名中,印度网球选手苏米特•纳加尔(Sumit Nagal)从135名上升了6个名次,达到职业生涯中的最好成绩129名。这位22岁的选手最近赢得了ATP挑战锦标赛。2019年美国网球公开赛中他首次亮相时,就在对阵费德勒的比赛中赢得了大满贯。纳加尔赢得了第一组比赛。(Indian tennis player Sumit Nagal moved up six places from 135to a career-best 129 in the latest men’s singles ranking. The 22-year-oldrecently won the ATP Challenger tournament. He madehis Grand Slam debut against Federer in the 2019 US Open. Nagal won the firstset.)”

    我们把上面的段落分成几个句子:

    1. 在最新的男子单打排名中,印度网球选手苏米特•纳加尔(SumitNagal)从135名上升了6个名次,达到职业生涯中的最好成绩129名。(Indian tennis player Sumit Nagal moved up six places from135 to a career-best 129 in the latest men’s singles ranking.)

    2. 这位22岁的选手最近赢得了ATP挑战锦标赛。(The 22-year-old recently won the ATP Challengertournament))

    3. 2019年美国网球公开赛中他首次亮相时,就在对阵费德勒比赛中赢得了大满贯。(Hemade his Grand Slam debut against Federer in the 2019 US Open.)

    4. 纳加尔赢得了第一组比赛。(Nagalwon the first set.)

    在这四个句子中,我们将选出第二个和第四个句子,因为每个句子都包含一个主语和一个宾语。第二句中,“22岁的选手(22-year-old)”是主语,宾语是“ATP挑战赛(ATP Challenger tournament)”。第四句中,主语是“纳加尔(Nagal)”,“第一组比赛(first set)”是宾语:

     

    让机器理解文本是最大的挑战,特别是在主语和宾语不止一个的情况下。以上面两个句子为例,提取句子中的宾语有点棘手。你能想到解决这个问题的方法吗?

    实体抽取

    从句子中提取一个词实体并不是艰巨的任务。我们可以借助词性(POS)标签轻松做到这一点。名词和专有名词可以是我们的实体。

    然而,当一个实体包括多个单词时,仅仅借助词性标记是不够的。我们需要解析句子间的复杂关系。先来获取其中一个句子的依存标记。使用流行的spaCy库来完成这个任务:

    import spacy

    nlp = spacy.load('en_core_web_sm')

    doc = nlp("The 22-year-old recently won ATP Challenger tournament.")

    for tok in doc:

    print(tok.text, "...", tok.dep_)


    输出:

    The… det

    22-year … amod

    – … punct

    old … nsubj

    recently … advmod

    won … ROOT

    ATP … compound

    Challenger … compound

    tournament … dobj

    . … punct

    根据依存关系解析器,这个句子中的主语(nsubj)是“old”。这不是我们想要的实体。我们想要的是“22岁的选手(22-year-old)”。

    “22岁的(22-year)”的依存关系标签是amod,这意味着它是(old)”的修饰语。因此,应该定义一个规则来提取这样的实体。

    可以是这样的规则:提取主语/宾语及其修饰语,并提取它们之间的标点。

    但是再看看句子中的宾语(dobj)。它只是“锦标赛(tournament)”而不是“ATP挑战锦标赛(ATPChallenger tournament)”。在这句里,没有修饰词,只有复合词。

    复合词是指不同词组合起来所形成的新术语,它们有着和源词不同的意思。因此,我们可以更新上面的规则----提取主语/宾语及其修饰语、复合词,并提取它们之间的标点。

    简而言之,我们使用依存句法分析来提取实体。

    提取关系

    实体提取仅仅是一半的工作。想要建立知识图谱,需要边来连接各个节点(实体)。这些边表示节点之间的关系。

    回到上一节中的例子,选出几句话来构建一个知识图谱:

     

    你能猜出这两个句子中主语和宾语的关系吗?

    两个句子有相同的关系——“赢得(won)”。看看该如何提取这些关系。这里将再次使用依存项解析:

    doc = nlp("Nagal won the first set.")

    for tok in doc:

    print(tok.text, "...", tok.dep_)

    输出:

    Nagal… nsubj

    won … ROOT

    the … det

    first … amod

    set … dobj

    . … punct

    为了提取关系,必须找到句子的根(root),它也是句子里的动词。因此,在这个句子里找到的关系就是“赢得(won)”。

    最后,这两个句子的知识图谱是这样的:

    从文本数据构建知识图谱

    是时候进行代码操作了!打开Jupyter Notebooks(或者任何你喜欢的集成开发环境-IDE)。

    使用一组从维基百科中找到的电影中的文本,从头开始构建一个知识图谱。我已经从500多篇维基百科文章中摘录了大约4300句话。每个句子都包含两个实体——一个主语和一个宾语。你可以点击这里下载这些句子。

    推荐使用Google Colab,能加快计算的运行速度。

    导入库

    import re

    import pandas as pd

    import bs4

    import requests

    import spacy

    from spacy import displacy

    nlp = spacy.load('en_core_web_sm')

    from spacy.matcher import Matcher

    from spacy.tokens import Span

    import networkx as nx

    import matplotlib.pyplot as plt

    from tqdm import tqdm

    pd.set_option('display.max_colwidth', 200)

    %matplotlib inline

    读取数据

    阅读包含维基百科句子的CSV文件:

    # import wikipedia sentences

    candidate_sentences = pd.read_csv("wiki_sentences_v2.csv")

    candidate_sentences.shape

    输出:(4318, 1)

    来看几个例句:

    candidate_sentences['sentence'].sample(5)

    输出:

     

    检查其中一个句子的主语和宾语。理想情况下,句子中应该有一个主语和一个宾语:

    doc = nlp("the drawdown process is governed by astm standard d823")

    for tok in doc:

    print(tok.text, "...", tok.dep_)

    输出:

     

    很好!只有一个主语“过程”(process)和一个宾语“标准”(standard)。你可以用类似的方式检查其他句子。

    实体对抽取

    想要构架出一个知识图谱,最重要的是节点和它们之间的边。

    这些节点是出现在维基百科语句中的实体。边是连接各个实体之间的关系。我们将以无监督的方式提取这些要素,也就是说,我们将依靠句子的语法。

    其主要思想就是在浏览一个句子时,把遇到的主语和宾语提取出来。然而,还有其他挑战存在——实体可能不止一个单词,如“红酒(red wine)”,依存关系解析器只会将单个单词标记为主语或宾语。

    因此,下面创建了一个函数来从一个句子中提取主语和宾语(也就是实体),同时解决了上面提到的挑战。方便起见,将代码分成了多个板块:

    defget_entities(sent):

    ## chunk 1

    ent1 =""

    ent2 =""

    prv_tok_dep ="" # dependency tag of previous token in the sentence

    prv_tok_text ="" # previous token in the sentence

    prefix =""

    modifier =""

    #############################################################

    for tok in nlp(sent):

    ## chunk 2

    # if token is a punctuation mark then move on to the next token

    if tok.dep_ !="punct":

    # check: token is a compound word or not

    if tok.dep_ =="compound":

    prefix = tok.text

    # if the previous word was also a 'compound' then add the current word to it

    if prv_tok_dep =="compound":

    prefix = prv_tok_text +""+ tok.text

    # check: token is a modifier or not

    if tok.dep_.endswith("mod") ==True:

    modifier = tok.text

    # if the previous word was also a 'compound' then add the current word to it

    if prv_tok_dep =="compound":

    modifier = prv_tok_text +""+ tok.text

    ## chunk 3

    if tok.dep_.find("subj") ==True:

    ent1 = modifier +""+ prefix +""+ tok.text

    prefix =""

    modifier =""

    prv_tok_dep =""

    prv_tok_text =""

    ## chunk 4

    if tok.dep_.find("obj") ==True:

    ent2 = modifier +""+ prefix +""+ tok.text

    ## chunk 5

    # update variables

    prv_tok_dep = tok.dep_

    prv_tok_text = tok.text

    #############################################################

    return [ent1.strip(), ent2.strip()]

    我来解释一下上面函数中的代码板块:

    板块1

    我已经在这个板块中定义了一些空变量。prv_tok_dep 和 prv_tok_text将分别保存句子中前一个单词和它本身的依存标记。prefix和modifier将保存与主语或宾语有关联的文本。

    板块2

    接下来,循环浏览句子中的所有标记。首先要检查标记是不是标点符号。如果是,那么我们将忽略它看下一标记(token)。如果标记是复合词(依存标记=“compound”)中的一部分,将把它保存在“前缀”变量中。一个复合词是多个词的组合,它们联系在一起形成一个有新意义的词,例如“足球场”(“FootballStadium”),“动物爱人”(“animallover”)。

    当我们在句子中遇到主语或宾语时,会给它加上这个前缀。修饰语同样,比如“漂亮的衬衫”、“大房子”等等。

    板块3

    在这里,如果标记是主语的话,它将被捕获为ent1变量中的第一个实体。诸如prefix, modifier, prv_tok_dep,和 prv_tok_text 这些变量将被重置。

    板块4

    在这里,如果标记是宾语,那么它将被捕获为ent2变量中的第二个实体。诸如prefix, modifier, prv_tok_dep,和 prv_tok_text 这些变量将再次被重置。

    板块5

    一旦在句子中捕获了主语和宾语,我们将更新前面的标记及其依存标记。

    在一个句子上测试一下这个函数:

    get_entities("the film had 200 patents")

    输出: [‘film’,‘200 patents’]

    很好,看起来一切都和预想的一样。在上面的句子中,“电影(film)”是主语,“200项专利(200 patents)”是宾语。

    现在可以使用这个函数,提取数据中所有句子的实体对:

    entity_pairs = []

    for i in tqdm(candidate_sentences["sentence"]):

    entity_pairs.append(get_entities(i))


    这个实体对名单包含维基百科句子中的所有主语-宾语对。来看看其中的几个:

    entity_pairs[10:20]

    输出:

     

    在这些实体对中有一些代词,如“我们(we)”、“它(it)”、“她(she)”等等。我们希望用专有名词或名词来代替它们。也许可以进一步改进get_entities()函数来过滤代词。现在,让我们暂时保持现状,进入关系抽取部分。

    关系/谓语提取

    这将是本文非常有趣的一部分。假设是——谓语实际上是句子中的主要动词。

    例如,在“1929年共有六十部好莱坞音乐剧被发行”这个句子中,动词是“被发行(released in)”,它也是本句得到的三重结构的谓语。

    下面的函数能够从句子中捕获到这样的谓语。这里使用了spaCy库基于规则的匹配功能:

    defget_relation(sent):

    doc = nlp(sent)

    # Matcher class object

    matcher = Matcher(nlp.vocab)

    #define the pattern

    pattern = [{'DEP':'ROOT'},

    {'DEP':'prep','OP':"?"},

    {'DEP':'agent','OP':"?"},

    {'POS':'ADJ','OP':"?"}]

    matcher.add("matching_1", None, pattern)

    matches = matcher(doc)

    k =len(matches) -1

    span = doc[matches[k][1]:matches[k][2]]

    return(span.text)

    函数中定义的模式试图找到句子中的根(root)词或主要动词。一旦确定了根,模式就会检查它后面是不是介词(“prep”)或功能词。如果是的话,就将它添加到根词。

    这个函数是这样的:

    get_entities("John completed the task")

    输出: “completed

    用同样的方法找出所有维基百科句子中的关系:

    relations = [get_relation(i) for i in tqdm(candidate_sentences['sentence'])]

    来看一看刚刚提取的最常见的关系或谓词:

    pd.Series(relations).value_counts()[:50]

    输出:

     

    结果表明,“A现在是(is)B”和“A曾是(was)B”是最常见的关系。然而,有很多的关系与整个主题,即“围绕电影的生态系统”联系更紧密。其中一些例子是“由”、“发布”、“制作”、“编写”等等。

    构建知识图谱

    最后,从提取的实体(主语-宾语对)和谓语(实体之间的关系)构建知识图。

    创建一个实体和谓语的数据框架:

    # extract subject

    source = [i[0] for i in entity_pairs]

    # extract object

    target = [i[1] for i in entity_pairs]

    kg_df = pd.DataFrame({'source':source, 'target':target, 'edge':relations})


    接下来,使用networkx库从这个数据框架创建一张网。节点表示实体,节点之间的边或连接表示节点之间的关系。

    它将是一个有向图谱。换句话说,任何连接的节点对之间的关系都不是双向的,它只是从一个节点到另一个节点。例如,“约翰吃意大利面”:

    # create a directed-graph from a dataframe

    G=nx.from_pandas_edgelist(kg_df, "source", "target",

    edge_attr=True, create_using=nx.MultiDiGraph())


    描绘一下这个网:

    plt.figure(figsize=(12,12))

    pos = nx.spring_layout(G)

    nx.draw(G, with_labels=True, node_color='skyblue', edge_cmap=plt.cm.Blues, pos= pos)

    plt.show()

    输出:

     

    好吧,这并不是我们期待的结果,但看起来还是相当壮观的!

    但已经构建了一个图谱,显示了所有的关系。很难想象将这么多关系或谓语可视化成一个图谱。

    因此,建议只把一些重要的关系做成可视化图谱,我一次处理一个关系。从“由”组成的关系开始:

    G=nx.from_pandas_edgelist(kg_df[kg_df['edge']=="composed by"], "source", "target",

    edge_attr=True, create_using=nx.MultiDiGraph())

    plt.figure(figsize=(12,12))

    pos = nx.spring_layout(G, k=0.5) # k regulates the distance between nodes

    nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_cmap=plt.cm.Blues, pos= pos)

    plt.show()


    输出:

     

    这是一个更清晰的图谱。这里箭头指向作曲家。例如,A.R.拉赫曼是一位著名的音乐作曲家,在上面的图谱中,他有诸如“电影原声带”、“电影配乐”和“音乐”这样的实体。

    再看更多的关系。

    因为编写在任何一部电影中都占重要角色,所以我想把“编写”关系的图谱可视化:

    G=nx.from_pandas_edgelist(kg_df[kg_df['edge']=="written by"], "source", "target",

    edge_attr=True, create_using=nx.MultiDiGraph())

    plt.figure(figsize=(12,12))

    pos = nx.spring_layout(G, k=0.5)

    nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_cmap=plt.cm.Blues, pos= pos)

    plt.show()

    输出:

     

    太棒了!这张知识图谱给了我们一些非同寻常的信息。像Javed Akhtar、Krishna Chaitanya和Jaideep Sahni都是著名的作词家,这张图谱很好地捕捉到了这种关系。

    看看另一个重要谓语的知识图谱,即“释放(发布于)”:

    G=nx.from_pandas_edgelist(kg_df[kg_df['edge']=="released in"], "source", "target",

    edge_attr=True, create_using=nx.MultiDiGraph())

    plt.figure(figsize=(12,12))

    pos = nx.spring_layout(G, k=0.5)

    nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_cmap=plt.cm.Blues, pos= pos)

    plt.show()

    输出:

     

    我们可以在这个图谱中看到不少有趣的信息。例如这种关系:“20世纪80年代上映的几部动作恐怖电影”和“4844块屏幕上放映的格斗电影”。这些都是事实,这张图谱告诉我们,确实可以从文本中挖掘出这些事实。真是太神奇了!

     

    结语

    在本文中,我们学习了如何以三元组的形式,从给定文本中提取信息,并借此构建知识图谱。

    然而,我们只使用恰好有两个实体的句子。即使这样,也能够建立信息量很大的知识图谱,所以想象一下它的潜力!

    我鼓励大家探索这个领域的信息抽取,学习更复杂关系的提取。如果你有任何疑问或想要分享你的想法,请随时留言。

     

    留言 点赞 关注

    我们一起分享AI学习与发展的干货
    欢迎关注全平台AI垂类自媒体 “读芯术”

    (添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

     

    展开全文
  • 数学计算机科学中的重要性

    万次阅读 2017-09-21 00:00:00
    数学计算机科学中的重要性数学是一门工具性很强的科学,它与别的科学比较起来还具有较高的抽象性等特征。起初是计算机科学工作者离不开数学,而数学工作者认为计算机对他们可有可无,但是现在是互相都离不开对方了...


    数学在计算机科学中的重要性

    数学是一门工具性很强的科学,它与别的科学比较起来还具有较高的抽象性等特征。起初是计算机科学工作者离不开数学,而数学工作者认为计算机对他们可有可无,但是现在是互相都离不开对方了,计算机也提高了数学工作者在人们心目中的地位,大部分的数学工作者开始认识到计算机的重要性,并越来越多地进入到计算机领域发挥作用。


    但是随着人工智能、GPS(全球定位系统)等飞速的发展和计算机运算性能飞跃性的提升,计算机的优势越来越深入到思维领域,于是计算机将高深的数学理论用到实际中来,十分有效地解决了许多实际问题,例如著名难题四色问题就是被计算机证明的。问题的求解过程中有许多具有实用价值的数学分支,如分析几何、小波分析、离散数学、仿生计算、数值计算中的有限单元方法等。它让人们知道计算机程序设计结合的就是数学知识和数学思想。


    软件编程是基于数学模型的基础上面的,所以,数学是计算机科学的主要基础,以离散数学为代表的应用数学是描述学科理论、方法和技术的主要工具。软件编程中不仅许多理论是用数学描述的,而且许多技术也是用数学描述的。从计算机各种应用的程序设计方面考察,任何一个可在存储程序式电子数字计算机上运行的程序,其对应的计算方法首先都必须是构造性的,数据表示必须离散化,计算操作必须使用逻辑或代数的方法进行,这些都应体现在算法和程序之中。


    此外,到现在为止,算法的正确性、程序的语义及其正确性的理论基础仍然是数理逻辑,或进一步的模型论。真正的程序语义是模型论意义上的语义。于是软件编程思想运行的严密性、学科理论方法与实现技术的高度一致是计算机科学与技术学科同数学学科密切相关的根本原因。


    从学科特点和学科方法论的角度考察,软件编程的主要基础思想是数学思维,特别是数学中以代数、逻辑为代表的离散数学,而程序技术和电子技术仅仅只是计算机科学与技术学科产品或实现的一种技术表现形式。


    软件编程与数学思维的联系

    数学在计算机领域的发展


    如今形形色色的软件,都与数学有必然的联系,它们相互相成。例如,逻辑学在学科中的应用从早期的数理逻辑发展到今天的程序设计模型论;数学在学科中的应用从早期的抽象代数发展到今天的图形学、工程问题方面;几何学的应用从早期的二维平面计算机绘图发展到今天的三维动画软件系统,并在与复分析的结合中产生了分形理论与技术;在游戏、图形软件开发中引用了线性代数中大量的坐标变换,矩阵运算;在数据压缩与 还原、信息安全方面引入了小波理论、代数编码理论等。


    软件编程的思维定式


    软件编程的思维定式决定了一个人编程的水平,在编程过程中,数学思维清晰,编写出来的程序让人耳目一新。结合教学,通过调查分析,了解到超过85%的学生,他们在编程时是根据语法而编写程序,完全脱离了软件编程的思维,这种思维定式使得他们编写的程序相当糟糕,没有一点逻辑。


    之所以造成这种软件编程的思维,是因为他们平时对数学思维的培养不够重视。很多学计算机的学生想:学高数,这有什么用?


    学线性代数有什么用?学离散数学,有什么用?于是他们很少去上这些课,马马虎虎,整天闷在寝室里,玩玩游戏,装装软件,看看C语言。只知道概率问题和矩阵知识在其它课程上起到了互补作用,学的不是很深。


    但是当他们看到<<数据结构和算法>>时,感到其中的内容对他们而言感觉相当的艰涩难懂,这时他们就隐约感觉到了数学思维的作用了。在此之前,他们不仅荒废了大学的高等数学,连初中的初等数学也忘的好多,当他们进行高抽象思维时,确实感觉自己的思维已经很迟钝了。


    学计算机的学生之所以觉得《数据结构》这门课程很难,就是因为他们的数学思维锻炼的不够!其实生活中有很多这样的例子:


    对于一个刚毕业的,编应用软件的大学生,在编程中用到《线性代数》的矩阵时,恐怕便会想,在大学把线性代数学好就好了;


    当在程序中用到动态链表、树时,恐怕也会想“在大学时花点时间去学《数据结构》,会多么的有意义”;当学数据结构时,恐怕也会想“学《离散数学》时为什么要逃那么多的课,要不然学离散的时候就会很轻松”。所以数学思维不够,在软件编程会有很多的疑虑,显的有点缩手缩尾,而且写的程序也不够健全,缺乏逻辑。


    软件编程与数学思维的融合


    很多专业人士觉得数学和软件编程能力就像太极和拳击,软件编程能力很强就好比出拳速度很快很重,能直接给人以重击;数学很好的话就好像一个太极高手,表面上看没有太大的力量但是内在的能量是更强大的,但是好的拳击手是越年轻越好,而太极大师都是资历越深越厉害。所以数学是成就大师的必备能力,虽然很多学生看上去感觉没有什么用途,但是到了一定的水平之后就会体会它的力量了。


    数学思维在软件编程中的应用


    目前很多出名的IT公司在笔试的时候,都会在程序设计题中考察应聘者的数学思维能力,因此,这应该引起广大学生在平时的学习中注意锻炼自己的数学思维,有机会的话参加一下数学建模比赛,你便会有很深刻的体会 ---原来数学和计算机结合得这样紧密。下面典型的代码,在设计过程中充分的运用了数学思维。


    题目一:从3个红球,5个白球,6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。


    程序一:

    #include "stdio.h"

    void main()

    {

    int i,j,k; //I代表红球,j代表白球,k代表黑球

    printf("\n red write black\n");

    for(i=0;i<=3;i++)

    for(j=1;j<=5;j++) //j=1是因为题目中要求必须要有白球


    {

    k=8-i-j; //黑球的个数

    if(k>=0&&k<=6)

    {

    printf("%3d,%3d,%3d",i,j,k); //输出组成方案


    }

    }

    }

    从上面的例子中我们可以隐隐知道数学思维在软件编程中的应用。尽管学习数学带给计算机专业人士的回报大过常人,但现今社会里每个人都能由此受益,是让人们提高自己思维能力,变得聪颖的绝佳方法。这种思维能力能让人们在各方面受益!但实际上,数学上功底扎实,在软件编程上的优势尽显,项目的设计模式格外地优化,程序逻辑条理也格外地清晰。因为数学可以培养人的逻辑思维能力,而程序设计需要很强的逻辑思维能力。


    这些让我们深刻的体会到数学思维与软件编程的耦合性,其实我们国家的计算机软件水平的落后不是因为我们缺少程序员,而是因为缺乏懂数学的高质量的程序员。一个具有数学修养的程序员在写代码时更有可能写出逻辑严密的最简化的高质量代码。而目前一些龙头IT公司,比如微软公司总裁比尔·盖茨年青时就对数学很痴迷,而他们的项目经理,必须得具备超强的数学思维,而且有些还是数学专业的博士,从这也可以看出微软公司对于数学人才的重视程度。


    软件编程的思想最重要是算法,而算法是建立在数学思维上的,其实说白了,程序只是一件衣服,算法才是它的灵魂,算法就来自于数学,没有深厚的数学思维功底,是弄不懂算法的。所以,如果你想从事软件编程,那么就认真的培养自己的数学思维吧!


    来源:信息与计算机科学


    ☞  哈尔莫斯:怎样做数学研究

    ☞  扎克伯格2017年哈佛大学毕业演讲

    ☞  线性代数在组合数学中的应用

    ☞  你见过真的菲利普曲线吗?

    ☞  支持向量机(SVM)的故事是这样子的

    ☞  深度神经网络中的数学,对你来说会不会太难?

    ☞  编程需要知道多少数学知识?

    ☞  陈省身——什么是几何学

    ☞  模式识别研究的回顾与展望

    ☞  曲面论

    ☞  自然底数e的意义是什么?

    ☞  如何向5岁小孩解释什么是支持向量机(SVM)?

    ☞  华裔天才数学家陶哲轩自述

    ☞  代数,分析,几何与拓扑,现代数学的三大方法论

    算法数学之美微信公众号欢迎赐稿

    稿件涉及数学、物理、算法、计算机、编程等相关领域。

    稿件一经采用,我们将奉上稿酬。

    投稿邮箱:math_alg@163.com


    展开全文
  • 机器学习社会科学中的应用

    千次阅读 2018-12-18 22:12:34
    在科学研究,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文,开辟“综述”专栏,敬请关注。 我们都希望找到那些...
  • 了解天才科学家的研究历程,了解知识贴近生活的一面,学习就是一件充满乐趣的事儿 ——《天才引导的历程:数学的伟大定理》书评(by 姜影) 人们感慨社会日新异的变化时,也许有人会问:是谁推动了这...
  • 当前科研数据总量庞大、增长快速、信息含量低、数据种类多样[2]的背景下,传统的知识图谱绘制方法、步骤和工具已经难以应对,急切需要针对大数据环境的科学知识图谱的绘制的方法及其关键技术研究。 1. 知识...
  • ,大灰狼和大家提到Python编程语言拥有诸多Web开发、数据科学、爬虫系统、机器学习、自动化运维和测试等互联网开发的框架和结构特性。 Python可能不是网络应用开发的理想选择,但是不可否认的是,Python也正...
  • 本文取自美国统计学家David Salsburg的作品《女士品茶-统计学如何变革了科学生活》未经允许请勿转载!关于统计模型概念融入科学的确切时刻,很难得到准确的回答。比如,拉普拉斯发明了误差函数,用于解决天文学...
  • 作者:华为云开发者社区 ...来源:知乎 ...· 1945艾伦图灵论文《计算机器不智能》提出了著名的图灵测试,给人工智能的収展产生了深远的影响。 · 1951年,马文·明斯基(Marvin Minsky)和迪恩..
  • 小世界现象科学研究

    千次阅读 2012-10-19 20:39:35
    报告的题目是“小世界现象科学研究”,阐述了小世界现象和对科学研究的启示。 2012年10月19日 报告的主要内容: 1.引言: 上海大学到北京大学(或者相反),通过网络如何到达?不允许使用搜索引擎等,只允许...
  • 多格兰发现的一个土石堆,位于奥克尼郡附近。潜水员对这里进行了勘察 圣安德鲁斯大学的画家描绘的一幅图画,展现了多格兰居民的日常生活 科学家正对从奥克尼郡附近土石堆提取的沉积物样本进行分
  • 因为新书增添和细化了很多知识点,所以草堂君会逐步将这些内容补充到统计基础导航页来,帮助大家建立数据分析思维。限于篇幅,只截取书部分内容。二百多年前,英国批判现实主义小说家狄更斯曾经说过:“这是一...
  • “独家解读,听听他人的声音”,聆听他人的学术成长经历,对科研问题独到的见解,了解产业界的最新进展,相互学习、相互借鉴、集思广益、共同进步。为此,我们特别开辟“独家解读”专栏,让你科研道...
  • 脑与认知科学.pdf

    2020-05-27 12:55:46
    本课程重点介绍脑与认知科学的基本概念、知识及其 现实生活中的应用,此基础上介绍人工大脑、认知计 算等相关的智能科学技术,体现了脑科学、认知科学、 人工智能及计算机和信息科学等多学科领域交叉的特点 ,为...
  • 把握好知识架构培养孩子解决实际生活的能力 PAGE PAGE 1 作者 日期 PAGE / NUMPAGES 把握好知识架构 培养孩子解决实际问题的能力 垣曲县小学教研室 曹云霞 一当前我县小学科学教学的现状 1教师方面 年龄偏大兼职教师...
  • 被印纸币上的七大科学

    千次阅读 2019-03-01 15:36:58
    普罗大众日常生活中接触得最多、而且会小心保管的东西就是钱币,他们无法不在意印钱币上的名人及其背后的故事。因此货币上的科学家肖像具有重要的启蒙意义,引导青少年从小认识科学家和热爱科学探索。那么,现在...
  • 数据科学导论

    千次阅读 2019-02-12 00:48:11
    清华大学数据科学系列课程之一《数据科学导论》心得
  • 计算机科学概论(美)布鲁克希尔 这本书非常推荐大家去读一下,作者用非常浅显易懂的语言让你能够对计算机领域有一个全面的认识和了解,我研一时候读的,这本书让我受益匪浅,对本科学的计算机知识能够串联一起...
  • 科学研究设计一:什么是科学

    千次阅读 2017-11-17 22:09:20
    什么是科学?理论和假设
  • 摘要:文章系统地介绍了信息处理、文字与自然语言的理解、数据仓库和数据挖掘、知识科学、人工智能、人工神经网络的研究、遗传算法、逻辑学等领域研究前沿的若干问题,并提出未来计算机科学的发展趋势。...
  • 科学发现提出科学问题. 科学证明证明研究假设. 揭示现象 事物表现的内在联系和客观形式, 称为现象. 揭示现象的关键是揭示事物的内在联系. 需要基于大量的扎实工作(观察)和渊博的知识结构. 特别需要对现象的敏锐...
  • 今天发现了一个网站:How Things Work Home Page,给大众解释日常生活中的物理现象,读起来很有意思。有的解释读完以后,觉得明白了不少,可再细细一想,这不就是中学或者大学学过的某某知识吗。很多知识当时学懂了...
  • 生活中的定律

    千次阅读 2012-10-22 10:08:25
    1.生活中的定律——墨菲定律   墨菲定律:如果有两种选择,其中一种将导致灾难,则必定有人会作出这种选择。 “墨菲定律”源自于一位名叫墨菲的美国上尉。因为他认为某位同事是个倒霉蛋,便不经意地说了句笑话:...
  • 由于伍德华的权威地位,他的宣布就成为一时定论,他们的发现在人类学上被命名为“辟尔唐人”。而这种“发现”又被当作达尔文生物进化论的一个有力证据。一时陶逊由一个不出名的律师而成为闻名遐迩的伟大发现者。  ...
  • 知识图谱介绍 知识概念图谱介:知识是认知,图是载体,数据是实现,结构化的数据进行关联形成了知识图谱 知识图谱发展历程 人工智能的发展介绍:5次重要的发展里程碑 认知智能的基础:海量行为数据的知识化(推理...
  • 美团里的科学家和外卖的 AI

    千次阅读 2020-06-24 19:58:00
    科技的价值在于改善每一个人的生活。在家点一杯奶茶,从手机下单到骑手把物品送上门,只要 30 分钟左右,你要做的就是在家等待。外卖一定程度上改变了我们的生活,它让我们知道吃喝玩乐比从前更...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,222
精华内容 38,088
关键字:

在生活中发现的科学现象