微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

英语中的随机短语生成和性别/人类一致性

如何解决英语中的随机短语生成和性别/人类一致性

我正在尝试为莫尔斯电码培训师生成随机的英语练习短语。我想弄清楚如何处理英语中的性别协议。我希望能够生成诸如“他是儿子”、“她是母亲”、“这是一扇门”之类的短语,但要避免诸如“他是母亲”、“她是门”之类的词, “是父亲”。 “他是一位母亲”混合了性别,“她是一扇门”和“这是一位父亲”这样的句子混合了人类/非人类。似乎在 rgl 中,human 和 nonhuman 都有 Gender 类型。

有时这种事情是可以接受的,例如“没有人是一座孤岛”这句话。而且,出于某种原因,性别暴露派对经常使用“Its a boy!”之类的短语。但是,我只是想生成训练数据,所以我想专注于常见用法

我对语法框架很陌生,所以我可能会完全错误地处理这个问题。这是我目前所拥有的,

Agreement.gf

abstract Agreement = {

flags startcat = Message ;

cat
  Message ; Subject ; SubjectComplement ;
fun
  Is  : Subject -> SubjectComplement -> Message ;
  He,She,It  : Subject;
  Son,Daughter,Father,Mother,Fence,Door : SubjectComplement;
}

AgreementEng.gf

concrete AgreementEng of Agreement = open DictEng,SyntaxEng,ParadigmsEng,VerbEng,ResEng in {
lincat
  Message  = Cl ;
  Subject  = NP;
  SubjectComplement = CN;
lin
  Is s sc = mkCl s sc;
  He  = DictEng.he_Pron;
  She = DictEng.she_Pron;
  It = DictEng.it_Pron;
  Son = mkCN son_N;
  Daughter = mkCN daughter_N;
  Mother = mkCN mother_N;
  Father = mkCN father_N;
  Fence  = mkCN fence_N;
  Door  = mkCN fence_N;
}

如果我将其加载到 gf 中并运行 generate_random | linearize,它会起作用,但会忽略性别和人性。

我看到在 DictEng 中,代词有一些性别/非人类标记

lin she_Pron = mkPron "she" "her" "her" "hers" singular P3 feminine ;
lin he_Pron = mkPron "he" "him" "his" "his" singular P3 masculine ;
lin it_Pron  = mkPron "it" "it" "its" "its" singular P3 nonhuman;

虽然不适用于大多数名词,

lin mother_N = mkN "mother" "mothers";
lin daughter_N = mkN "daughter" "daughters";

虽然有些确实有性别标记

lin actor_N = mkN masculine (mkN "actor" "actors");
lin actress_N = mkN feminine (mkN "actress" "actresses");

你会如何处理这个问题?

我愿意接受有关此代码任何方面的建议——不仅仅是性别问题。我的总体目标是生成越来越复杂、含糊不清的英语短语。想想 Duo Lingo - 但对于莫尔斯电码。我将有一堆训练级别,这些级别建立在以前级别的基础上,添加新词汇、更长的句子等。

目前,我不关心非英语语言——这对未来的我来说是个问题。我也不需要支持 DictEng 中的所有内容。潜在单词和短语的列表将手工策划。

使用目前显示内容,我将从单个单词的训练开始,“他”、“她”、“它”、“是”、“儿子”等。

然后是简单的短语“他是”、“她是”、“它是”。

最后是完整的句子,比如“他是一个儿子”。

然后我会添加复数形式,“我们”、“他们”、“是”、“儿子”等。然后我会单独训练新单词。然后是“我们是”、“他们是”等短语,然后是“我们是父亲”的句子。然后我会混合使用单复数句。

因此,在语法文件中,我需要粒度来生成每种不同类型的训练短语。

谢谢!

(不确定这很重要,但我有几十年的 Haskell 经验并且涉足 Idris 之类的东西。所以我认为我对语法框架语言很好——我的麻烦更多是在理解库(rgl)和大局方面) .

解决方法

RGL Gender 参数只控制诸如“她看到自己/他看到自己/树看到自己”之类的东西,但没有比这更语义化的了。所以如果你想控制你的句子有意义,那么你需要添加一个自定义参数。

这是一个有效的具体语法,因为它不会线性化性别不匹配的组合。

(顺便说一句,我把你的 Cl 换成了 S,因为 Cl 对时态、极性、情绪等都是开放的,而英语恰好在 GF shell 中输出了present指示,但你可以不要相信在其他语言中会发生这种情况。)

concrete AgreementEng of Agreement = open DictEng,SyntaxEng,ParadigmsEng,Prelude in {
lincat
  Message  = S ;
  Subject  = {np : NP ; g : HumanGender} ;
  SubjectComplement = {cn : CN ; g : HumanGender} ;

param
  HumanGender = M | F | Inanimate ;

lin
  Is s sc = case <s.g,sc.g> of {
    <Inanimate,Inanimate>
    |<M,M>
    |<F,F> => mkS (mkCl s.np sc.cn) ;
    _      => noS
    } ;
  He  = {np = he_NP ; g = M} ;
  She = {np = she_NP ; g = F} ;
  It = {np = it_NP ; g = Inanimate} ;
  Son = mkSubjCompl son_N M ;
  Daughter = mkSubjCompl daughter_N F;
  Mother = mkSubjCompl mother_N F ;
  Father = mkSubjCompl father_N M ;
  Fence  = mkSubjCompl fence_N Inanimate ;
  Door  = mkSubjCompl door_N Inanimate ;

oper
  mkSubjCompl : N -> HumanGender -> {cn : CN ; g : HumanGender} = \n,g ->
    {cn = mkCN n ; g = g} ;

  noS : S = mkS (mkCl (mkN nonExist)) ;
}

这个操作符 noS 是由 nonExist token 组成的,它只会导致一个异常并且什么也不打印。因此,当您生成所有树并对其进行线性化时,您会得到以下结果:

Agreement> gt  | l
he is a father
he is a son
it is a door
it is a fence
she is a daughter
she is a mother

但是如果你执行 gt | l -treebank,你会看到它生成了更多的树,但只是没有线性化那些 HumanGender 不匹配的树。

对于更柔和的选项,您可以让它输出句子(例如“她是父亲”),但在末尾附加一些内容。这是另一种方法,其中第一个具体输出所有内容,但您有第二个具体仅用于合理性过滤:https://github.com/michmech/plausibility#readme

最后,阅读this blog post可能会很有趣。它与您的问题没有直接关系,但它提供了一些如何在 GF 中思考事物的一般哲学。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。