这篇文章研究的是标点符号在prompt中的作用。
Midjourney的prompt可以包含标点符号。我们经常使用它们来制作prompt,而不需要太多思考。毕竟,这是官方的Midjourney用户指南声明:
使用逗号,括号和连字符来帮助组织你的想法,但请记住,MidjourneyBot不会可靠地解释它们。
对于许多用户来说,“不能可靠地解释它们”意味着“不用麻烦了”。然而,标点符号对你的prompt几乎没有影响,这是真的吗?如果他们这样做了怎么办?如果它们有微妙的影响,你可以利用它们来调整你的prompt?
到目前为止我们对标点符号的了解
在我们研究标点符号是否重要之前,让我们来看看Midjourney机器人可以可靠理解的五个主要标点符号:
- 双连字符
--
用于--ar 3:2
- 双冒号::用于multiprompt(可以表示::两边字符的权重)和输入weights
- 花括号{}表示排列prompt
- 反斜杠\用于转义排列中的逗号。例如,
/imagine prompt:a photo of {a bird\, cat, a dog\, fish}
将创建两个prompts:/imagine prompt:a photo of a bird\, cat
和/imagine prompt:a photo of a dog, fish
- 空格实际上就是分隔单词或tokens的字符
另外两个标点符号是正斜杠 / 和冒号: ——但它们是在命令中使用,而不是在prompt中。
根据Midjourney常见问题解答,上述标点符号列表之外的所有其他标点符号都是“有趣的噪音”。
“有趣的噪音”表明某些事情显然正在发生,即使还没有设计出实验来揭示它。在对prompt进行故障排除时,有必要尝试一下有趣的噪音,因为它可能是打开你想要的东西的钥匙。
Midjourney的编程不支持理解逗号或连字符,但建议在prompts中使用它们,因为人类会使用它们,而且它们在数据集中可能具有很强的相关性。
到目前为止,我们已经讨论了我们所知道的标点符号。现在,让我们来看看这个“有趣的噪音”。
以下是我们将探讨的4个问题:
- 如果我们用标点符号超载prompt符会怎样?
- 何时使用连字符,何时不使用?
- 如果我们用不同的标点符号来区分概念或想法有关系吗?
- 机器人能理解由标点符号组成的表情符号吗?
方法
- 至少重新提示3次
- 小心使用
/shorten
- 使用CLIP标记器
- 使用MidjourneyV5.2进行测试
每个prompt将被重新提示至少三次,以确保一致性和可重复性。结果预计会受到随机化的影响,但目标是在再次提示后找到类似的东西或效果。
/shorten
用于测试标点符号对prompt的影响。它用于检测由标点符号引起的单词“相对影响值”的变化。相对影响力的值表示token(或单词)对生成的输出是否具有更大的影响力或影响。
不幸的是, /shorten
仍然是一项正在进行的工作,需要更可靠地精确定位生成图像所需的单词。例如,一些重要的单词被 /缩短
划掉(划掉),但需要生成所需的图像。
但是,我们仍然可以使用它来验证prompt是否发生了变化,因为单词的相对影响值可能由于标点符号而发生了变化。
CLIP Tokenizer用于确定标点符号是否影响在prompt符中创建的tokens的数量。
Midjourney机器人会在读取prompt时将单词分解成称为“tokens”的片段。然后将tokens与训练数据进行比较以生成图像。
tokens的数量通常等于或超过单词的数量。更多的tokens并不总是好的,因为Midjourney V5.2中的prompt符最多只能容纳大约。60个tokens。
好的,让我们从现在开始寻找新的东西。
(1) 如果我们用标点符号超载prompt符会怎样?
感叹号用于表达强烈的情感。星号*符号强调消息传递应用程序中的单词或短语。如果我们把它们都塞进一个prompt中呢?对形象有影响吗?
Prompt 1 — /imagine prompt: a dog and a cat
Prompt 2 — /imagine prompt: a dog and a !!!!!**cat**!!!!
Prompt 3 — /imagine prompt: a cat and a !!!!!**dog**!!!!
Prompt 1 在没有标点符号时,为图像的外观建立基线。它创建了5个tokens。生成的图像描绘了一只没有表情或情感的狗和一只猫。
/shorten
分析只是忽略了猫作为重要关键字,这是令人沮丧的。- 为了演示标点符号的效果,我修改了prompt符,以包括短语“一张照片”-生成的图像与没有短语的图像相同(未显示图像)。据报道,狗的相对影响值为1,猫的相对影响值为0.6。
Prompt 2 用感叹号和星号填充了prompt。它生成了10个tokens,是prompt1的两倍!动物们现在表现出兴奋的迹象。令人惊讶的是,虽然“猫”这个词被标点符号包围,但狗比猫更兴奋。但摇了几下之后,这只猫也表现出兴奋的迹象。
- 因为在prompt中没有使用其他词语来描述情感,很明显,标点符号改变了受试者的行为举止
- 情绪的表现是随机的。偶尔,网格中的大多数图像都描绘了情感。其他时候,每个网格只有一个图像具有情感表达。
Prompt 3和Prompt 2是一样的,除了猫的位置和狗的位置互换了。因为Prompt 2中的狗狗同样兴奋,所以很难说位置的改变是否会让狗狗更开心。Prompt 3生成10个tokens,与Prompt 2相同。
- 看到
/shorten
如何识别感叹号(!!!!!cat)作为重要的tokens而忽略星号是很有趣的。Cat现在的相对值(0.46)低于没有标点符号的prompt符。
(上) /imagine prompt: a dog and a cat (下) /imagine prompt: a *dog and a !!!!!**cat**!!!!*
/shorten 分析结果. (上) /imagine prompt: a dog and a cat (中) /imagine prompt: a photo of a dog and a cat (下) /imagine prompt: *a photo of a dog and a !!!!!**cat**!!!!*
目前还不清楚我们是否可以针对一个主题,并在其周围使用多个标点符号来让主题“做某事”。
将prompt改为使用更少的感叹号对动物的表达几乎没有影响(图片未显示)。例如:/imagine prompt:a dog and a !cat!
不管周围有没有标点符号,狗狗们都很兴奋。(我还想在第一个图像网格中突出显示图4的6腿猫!)
(上) /imagine prompt: *a dog and a !!!!!**cat**!!!!* (下) /imagine prompt: *a cat and a !!!!!**dog**!!!!*
另一件需要注意的事情是,在单词周围加上星号将使它在Discord中斜体化。例如,/imagine prompt:dog将斜体/强调dog这个词。然而,不管有没有星号,都没有任何特殊效果。
摘要:标点符号会影响prompt中单词的相对影响力,产生的tokens数量,甚至受试者的行为举止。
(2) 什么时候用连字符,什么时候不用?
连字符是我最喜欢的连接单词的方便工具之一,它可以增加单词之间的联系和影响力。“影响力”指的是这些词在生成的图像中被表达或出现的能力。
Prompt 4 — /imagine prompt: a photo of an **elephant-like** **monster**
Prompt 5 — /imagine prompt: a photo of an **elephant like monster**
假设我们正在寻找具有某些怪物特征的大象,prompt 4的“elephant-like”链接短语比prompt5的结果更好。
根据“/shorten”分析的结果,“monster” token在prompt4中的影响较小,使主题看起来更像大象。
当prompt5中“monster” token的相对影响值增加时,我们得到一个具有大象特征的怪物。
prompt 4生成8个tokens,而prompt 5生成7个。
(上) /imagine prompt: a photo of an elephant-like monster (下) /imagine prompt: a photo of an elephant like monster
/shorten分析结果. (上) /imagine prompt: a photo of an elephant-like monster (下) /imagine prompt: a photo of an elephant like monster
什么时候使用连字符
Midjourney中的许多颜色使用连字符。在Midjourney V5 alpha中记录的一种公认的遗留颜色是带有连字符的“olive-green”。
Prompt 6 — /imagine prompt: a photo of a box **olive green**
Prompt 7 — /imagine prompt: a photo of a box **olive-green**
Prompt 8 — /imagine prompt: a photo of a box**, olive-green**
prompt8产生了最好的结果,假设我们正在寻找一个与橄榄无关的绿色盒子。它用逗号把盒子的概念和颜色分开。
prompt6有问题。如果没有连字符,机器人就会生成带有橄榄色和绿色方框的图像。如果这是你要找的,去掉连字符。
prompt7与prompt8非常相似。然而,它偶尔会生成一些绿色盒子和橄榄的图像。如果这就是你所需要的,那么就不需要加逗号了。
prompts6到8分别产生了7、8和9个tokens。标点符号增加了tokens的数量。
(上) /imagine prompt: a photo of a box olive green (中) /imagine prompt: a photo of a box olive-green (下) /imagine prompt: a photo of a box, olive-green
总结:连字符是用来连接单词,以增加他们的联想和影响力。它影响prompt中单词的相对重要性和生成的tokens的数量。
在对prompt进行故障处理时,请考虑添加或删除连字符,并判断生成的结果是否符合要求。
(3) 如果我们用不同的标点符号来区分概念或想法有关系吗?
Midjourney唯一的“官方”概念分隔符是双冒号::。这意味着机器人必须独立考虑概念或想法,而不是将它们结合起来。
双冒号在多提示符中被广泛使用。如果你是多提示和多提示的新手,看看这些故事:Midjourney:多提示的温和指南和Midjourney滑块方法:如何通过多提示微调图像。
还有其他很少讨论的概念分隔符。为了简单起见,我们将集中讨论逗号和管道符号。(注意:我将在本文中使用管道符号作为“标点符号”,尽管thesaurus.com说它不是。)
`/shorten据说与多提示符不兼容,但我发现它对短的多提示符有些作用。
Prompt 9 — /imagine prompt: a photo of a **honey bee**
Prompt 10 — /imagine prompt: a photo of a **honey, bee**
Prompt 11 — /imagine prompt: a photo of a **honey | bee**
Prompt 12 — /imagine prompt: a photo of a **honey:: bee::**
假设我们只是在寻找蜜蜂(不是蜂蜜),prompt9(没有标点符号)显然是赢家,表明蜜蜂在努力工作。
令人惊讶的是,逗号(prompt10)巧妙地将单词honey和bee分开。网格中至少有一张图像描绘了蜂巢上的蜜蜂。
- 我曾经认为逗号对概念分离没有任何影响,但这是不正确的。它确实有微妙的影响。这个新信息使我想知道是否应该删除或添加逗号以排除将来的prompts。
双冒号(prompt12)将蜂蜜和蜜蜂的概念分开。它在合成中生成了蜜蜂和蜂蜜/蜂巢的独立图像。分离的概念是显而易见的。(注意:末尾的最后一个双冒号是可选的,但这是我喜欢的编写多提示符的风格。)
Pipe是一个发现,它证明了它可以分离概念,尽管比双冒号更弱、更模糊。
/shorten
分析结果表明,标点符号改变了tokens的相对影响值。它支持这样一种看法,即逗号会微妙地影响概念分离,因为其影响值与没有逗号的prompt相似。
如前所述,生成的tokens数量随着使用标点符号的增加而增加。
从整体上看,标点符号的“概念分离强度”由高到低依次为:逗号(最弱)→管道→双冒号(最强)
(上) /imagine prompt: a photo of a honey bee (下) /imagine prompt: a photo of a honey, bee
(上) /imagine prompt: a photo of a honey | bee (下) /imagine prompt: a photo of a honey:: bee::
/shorten分析结果 (上) /imagine prompt: a photo of a honey bee (下) /imagine prompt: a photo of a honey, bee
/shorten 分析结果. (上) /imagine prompt: a photo of a honey | bee (下) /imagine prompt: a photo of a honey:: bee::
再次确认
考虑到Midjourney中概念分离的重要性,我将调查扩展到另一个主题上——海狮。
Prompt 13 — /imagine prompt: a photo of a **sea lion**
Prompt 14 — /imagine prompt: a photo of a **sea, lion**
Prompt 15 — /imagine prompt: a photo of a **sea | lion**
Prompt 16 — /imagine prompt: a photo of a **sea:: lion::**
实验结果与以往的蜜蜂实验结果一致。除了 / shorten
的结果更难以解释。目前还不清楚为什么逗号会对相对影响值产生如此重大的影响。
(上) /imagine prompt: a photo of a sea lion (下) /imagine prompt: a photo of a sea, lion
(上) /imagine prompt: a photo of a sea | lion (下) /imagine prompt: a photo of a sea:: lion::
Results of /shorten analysis. (Top/Left) /imagine prompt: a photo of a sea lion (Bottom/Right) /imagine prompt: a photo of a sea, lion
/shorten分析结果. (Top/Left) /imagine prompt: a photo of a sea | lion (Bottom/Right) /imagine prompt: a photo of a sea:: lion::
我还测试了使用连字符和加号+的效果。这里没有显示生成的图像,因为没有什么特别的期望。
不出所料,连字符很好地连接了这些想法。加号对概念分离的影响可以忽略不计,但改变了/shorten
分析中的相对影响值。
摘要:最强的概念分隔符是一个双冒号,后跟一个管道和一个逗号。逗号在分隔prompt中的概念方面有微妙的作用。该管道可能具有用于分离概念的新应用程序,作为多提示符的替代方案。尚不清楚该管道是否受控制多提示符的相同规则的约束。
/shorten 分析结果. (Top/Left) /imagine prompt: a photo of a sea-lion (Bottom/ Right) /imagine prompt: a photo of a sea + lion
(4) 机器人能理解由标点符号组成的表情符号吗?
最后,让我们看看机器人是否能理解一些完全由标点符号(没有单词)组成的表情符号。
Prompt 17 — /imagine prompt: {:-), :-(, ;-), :-/, :-O, X-(}
以下是经过测试的简单表情符号列表:
:-)
:-(
;-)
:-/
:-O
X-(
你猜怎么着?机器人只能理解 :-( 悲伤的表情符号。其他的表情符号都不起作用。
嘿,Midjourney机器人,你现在不开心吗?是因为我们给你太多工作要做吗?
/imagine prompt: :-(